Web MCP: scrape/crawl sites, web search, brand assets, app stores, YouTube, Reddit, Hacker News.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
ReplyNodes API key sent as a Bearer token for authenticated access.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Read public brand intelligence MCP tool calls require a ReplyNodes API key or OAuth access token. Domain validation occurs before admission; cache hits and upstream failures consume one unit. X-RateLimit-Limit is the effective fixed tier limit, X-RateLimit-Remaining is the capability bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp. HTTP: GET /{domain}
path parameter
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Read public brand intelligence MCP tool calls require a ReplyNodes API key or OAuth access token. Domain validation occurs before admission; cache hits and upstream failures consume one unit. X-RateLimit-Limit is the effective fixed tier limit, X-RateLimit-Remaining is the capability bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp. HTTP: GET /{domain}
| Argument | Type | Description |
|---|---|---|
| domain* | string | path parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"pattern": "^[a-z0-9.-]+$",
"description": "path parameter"
}
},
"additionalProperties": false
}Run the company-research workflow MCP tool calls require a ReplyNodes API key or OAuth access token. Malformed input is rejected before admission; admitted provider failures consume one unit. X-RateLimit-Limit is 3, X-RateLimit-Remaining is the Tier C bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp. Redis failure returns 503 degraded. HTTP: GET /v1/company-research
| Argument | Type | Description |
|---|---|---|
| domain* | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}Run the competitor-research workflow MCP tool calls require a ReplyNodes API key or OAuth access token. Malformed input (missing/invalid domain, empty/invalid/oversized competitor list) is rejected before admission. See /v1/company-research for the shared quota-header contract. HTTP: GET /v1/competitor-research
| Argument | Type | Description |
|---|---|---|
| domain* | string | query parameter |
| competitors* | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"domain",
"competitors"
],
"properties": {
"domain": {
"type": "string",
"description": "query parameter"
},
"competitors": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}Read a public URL as Markdown MCP tool calls require a ReplyNodes API key or OAuth access token. Admission occurs after method and target/SSRF validation and before cache/upstream work; cache hits and upstream failures consume one unit. X-RateLimit-Limit is the effective fixed tier limit, X-RateLimit-Remaining is the capability bucket balance, and X-RateLimit-Reset is the next UTC midnight Unix timestamp. Redis failure returns 503 degraded. Output format is chosen with request headers because the whole path and query string belong to the target URL: no Accept header, Accept: */*, text/markdown or text/plain returns Markdown (default); Accept: application/json (JSON preferred with q>0) returns the {data, meta} envelope with the same data shape as GET /v1/webcontext/scrape; X-Format: frontmatter returns Markdown preceded by a fixed seven-key YAML front-matter block; an unknown X-Format value, or application/json together with X-Format: frontmatter, returns 400 invalid_request with reason bad_option before any quota is spent. X-Include-Selectors and X-Exclude-Selectors (comma-separated CSS selectors, at most 10 entries and 512 bytes per header, duplicates removed, no control characters or { } ; < >) filter the page; they are part of the cache key; with selectors set, a page that returns an access-check page returns 502 upstream_blocked (no crawl fallback). A page main heading may remain even when it matches an exclude selector. Every error response of this host carries error.reason (a stable value from the closed set in the MarkdownHostError schema) and error.retryable in addition to error.code, error.message and error.request_id. Successful responses set Vary: Accept, X-Format. HTTP: GET /md/{target}
| Argument | Type | Description |
|---|---|---|
| target* | string | path parameter |
| X-Format | string | Output format: markdown (default) or frontmatter. Any other value returns 400 invalid_request with reason bad_option. Cannot be combined with Accept: application/json. |
Look up one public App Store application MCP tool calls require a ReplyNodes API key or OAuth access token. Look up one public App Store application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/app
| Argument | Type | Description |
|---|---|---|
| id | string | Numeric track id; provide this or appId. |
| lang | string | Language code. |
| appId | string | Bundle id; provide this or id. |
| country | string | Two-letter storefront code. |
| ratings | boolean | Include ratings information. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"id": {
"type": "string",
"description": "Numeric track id; provide this or appId."
},
"lang": {
"type": "string",
"description": "Language code."
},
"appId": {
"type": "string",
"description": "Bundle id; provide this or id."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"ratings": {
"type": "boolean",
"description": "Include ratings information."
}
},
"additionalProperties": false
}Get Fonts MCP tool calls require a ReplyNodes API key or OAuth access token. Extract the typography and font stack of a website by domain or URL. HTTP: GET /v1/brand/fonts
| Argument | Type | Description |
|---|---|---|
| url | string | One specific page URL to extract font information from instead of the whole domain. |
| domain | string | Website domain to extract font information from, e.g. replynodes.com. One of domain or url is required. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "One specific page URL to extract font information from instead of the whole domain."
},
"domain": {
"type": "string",
"description": "Website domain to extract font information from, e.g. replynodes.com. One of domain or url is required."
}
},
"additionalProperties": false
}Get Brand Logo MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch the brand logo kit for one company domain: primary logo URL, candidate logo variants, favicon, and og_image. HTTP: GET /v1/brand/logo
| Argument | Type | Description |
|---|---|---|
| domain* | string | Company domain to resolve, e.g. stripe.com. A bare domain only: no scheme, port, path, or credentials. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Company domain to resolve, e.g. stripe.com. A bare domain only: no scheme, port, path, or credentials."
}
},
"additionalProperties": false
}Retrieve Brand MCP tool calls require a ReplyNodes API key or OAuth access token. Resolve the full brand profile of a company by domain, or extract brand details from one specific page URL: name, description, primary logo, logos, colors, fonts, social links, favicon, and og_image. HTTP: GET /v1/brand/retrieve
| Argument | Type | Description |
|---|---|---|
| url | string | One specific page URL to extract brand details from instead of the whole domain. |
| domain | string | Company domain to resolve, e.g. apple.com. One of domain or url is required. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "One specific page URL to extract brand details from instead of the whole domain."
},
"domain": {
"type": "string",
"description": "Company domain to resolve, e.g. apple.com. One of domain or url is required."
}
},
"additionalProperties": false
}Search Brand MCP tool calls require a ReplyNodes API key or OAuth access token. Fuzzy brand or company search by name or domain; returns up to 10 lightweight matches with domain, name, and logo. HTTP: GET /v1/brand/search
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of matches to return (default and maximum 10). |
| query* | string | Brand name or domain to search for. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Maximum number of matches to return (default and maximum 10)."
},
"query": {
"type": "string",
"description": "Brand name or domain to search for."
}
},
"additionalProperties": false
}Get Styleguide MCP tool calls require a ReplyNodes API key or OAuth access token. Extract the design system of a website by domain or URL: colors, typography, spacing, and more. HTTP: GET /v1/brand/styleguide
| Argument | Type | Description |
|---|---|---|
| url | string | One specific page URL to extract a styleguide from instead of the whole domain. |
| domain | string | Website domain to extract a styleguide from, e.g. replynodes.com. One of domain or url is required. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "One specific page URL to extract a styleguide from instead of the whole domain."
},
"domain": {
"type": "string",
"description": "Website domain to extract a styleguide from, e.g. replynodes.com. One of domain or url is required."
}
},
"additionalProperties": false
}List applications by developer MCP tool calls require a ReplyNodes API key or OAuth access token. List applications by developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/developer
| Argument | Type | Description |
|---|---|---|
| lang | string | Language code. |
| devId* | string | public developer identifier. |
| country | string | Two-letter storefront code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"devId"
],
"properties": {
"lang": {
"type": "string",
"description": "Language code."
},
"devId": {
"type": "string",
"description": "public developer identifier."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
}
},
"additionalProperties": false
}List Company Changes events for an Entity MCP tool calls require a ReplyNodes API key or OAuth access token. Lists Events for a domain when the organization has a current or retained Watch topic subscription; unentitled Entities return 404. HTTP: GET /v1/entities/{domain}/events
| Argument | Type | Description |
|---|---|---|
| type | string | query parameter |
| limit | integer | query parameter |
| since | string | RFC3339 or a relative 24h/30d window |
| topic | string | query parameter |
| until | string | RFC3339 or a relative 24h/30d window |
| cursor | string | query parameter |
| domain* | string | Canonical registrable domain. |
| watch_id | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"domain"
],
"properties": {
"type": {
"type": "string",
"description": "query parameter"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"since": {
"type": "string",
"description": "RFC3339 or a relative 24h/30d window"
},
"topic": {
"type": "string",
"description": "query parameter"
},
"until": {
"type": "string",
"description": "RFC3339 or a relative 24h/30d window"
},
"cursor": {
"type": "string",
"description": "query parameter"
},
"domain": {
"type": "string",
"description": "Canonical registrable domain."
},
"watch_id": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}Retrieve entitled Entity topic history MCP tool calls require a ReplyNodes API key or OAuth access token. Returns retained canonical topic history for an entitled Entity, including history older than a Watch; unentitled access returns 404. HTTP: GET /v1/entities/{domain}/history/{topic}
| Argument | Type | Description |
|---|---|---|
| limit | integer | query parameter |
| topic* | any | path parameter |
| cursor | string | query parameter |
| domain* | string | Canonical registrable domain. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"domain",
"topic"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"topic": {
"$ref": "#/$defs/WatchTopic",
"description": "path parameter"
},
"cursor": {
"type": "string",
"description": "query parameter"
},
"domain": {
"type": "string",
"description": "Canonical registrable domain."
}
},
"additionalProperties": false
}Retrieve entitled Company Changes intelligence MCP tool calls require a ReplyNodes API key or OAuth access token. Returns only entitled topic state and recent events plus shared coverage, never internal Entity scheduling. HTTP: GET /v1/intelligence/{domain}
| Argument | Type | Description |
|---|---|---|
| domain* | string | Canonical registrable domain. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Canonical registrable domain."
}
},
"additionalProperties": false
}Health check MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /fetcher/healthz
No arguments.
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {},
"additionalProperties": false
}Readiness (auth/db status) MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /fetcher/readyz
No arguments.
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {},
"additionalProperties": false
}Get gateway capabilities MCP tool calls require a ReplyNodes API key or OAuth access token. Callable discovery is a runtime snapshot, not authorization or billing state. HTTP: GET /v1/capabilities
No arguments.
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {},
"additionalProperties": false
}List entitled Company Changes events MCP tool calls require a ReplyNodes API key or OAuth access token. Lists canonical Events covered by the organization's current or retained Watch topic subscriptions. HTTP: GET /v1/events
| Argument | Type | Description |
|---|---|---|
| type | string | query parameter |
| limit | integer | query parameter |
| since | string | RFC3339 or a relative 24h/30d window |
| topic | string | query parameter |
| until | string | RFC3339 or a relative 24h/30d window |
| cursor | string | query parameter |
| entity | string | query parameter |
| watch_id | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"type": {
"type": "string",
"description": "query parameter"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"since": {
"type": "string",
"description": "RFC3339 or a relative 24h/30d window"
},
"topic": {
"type": "string",
"description": "query parameter"
},
"until": {
"type": "string",
"description": "RFC3339 or a relative 24h/30d window"
},
"cursor": {
"type": "string",
"description": "query parameter"
},
"entity": {
"type": "string",
"description": "query parameter"
},
"watch_id": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}List available operations MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/hackernews/capabilities
No arguments.
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {},
"additionalProperties": false
}Fetch a single Google Play app's public detail record MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch a single Google Play app's public detail record. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/app_details/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | Google Play package id (e.g. com.nike.snkrs). |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Google Play package id (e.g. com.nike.snkrs)."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch a Google Play app's per-storefront availability MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch a Google Play app's per-storefront availability. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/availability/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | Google Play package id (e.g. com.nike.snkrs). |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
| countries | string | Comma-separated storefront codes. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Google Play package id (e.g. com.nike.snkrs)."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
},
"countries": {
"type": "string",
"description": "Comma-separated storefront codes."
}
},
"additionalProperties": false
}List available Google Play category identifiers MCP tool calls require a ReplyNodes API key or OAuth access token. List available Google Play category identifiers. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/categories
| Argument | Type | Description |
|---|---|---|
| country | string | Two-letter storefront code. |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch top public apps in a Google Play category MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch top public apps in a Google Play category. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/category_apps/{category}
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results; values outside 1..50 are rejected. |
| country | string | Two-letter storefront code. |
| category* | string | Google Play category identifier (e.g. GAME, SHOPPING). |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"category"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum number of results; values outside 1..50 are rejected."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"category": {
"type": "string",
"description": "Google Play category identifier (e.g. GAME, SHOPPING)."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch a Google Play app's declared data-safety disclosure MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch a Google Play app's declared data-safety disclosure. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/data_safety/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | Google Play package id (e.g. com.nike.snkrs). |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Google Play package id (e.g. com.nike.snkrs)."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch public apps published by a Google Play developer MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch public apps published by a Google Play developer. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/developer
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results; values outside 1..50 are rejected. |
| dev_id* | string | Google Play developer id. |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"dev_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum number of results; values outside 1..50 are rejected."
},
"dev_id": {
"type": "string",
"description": "Google Play developer id."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch a Google Play app's declared permissions MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch a Google Play app's declared permissions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/permissions/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | Google Play package id (e.g. com.nike.snkrs). |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Google Play package id (e.g. com.nike.snkrs)."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch public reviews for a Google Play app MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch public reviews for a Google Play app. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/reviews/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | Google Play package id (e.g. com.nike.snkrs). |
| sort | integer | Upstream review sort order. |
| limit | integer | Maximum number of results; values outside 1..50 are rejected. |
| score | integer | Filter reviews to this star rating (1..5). |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
| next_token | string | Pagination token from a previous reviews response. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Google Play package id (e.g. com.nike.snkrs)."
},
"sort": {
"type": "integer",
"description": "Upstream review sort order."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum number of results; values outside 1..50 are rejected."
},
"score": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "Filter reviews to this star rating (1..5)."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
},
"next_token": {
"type": "string",
"description": "Pagination token from a previous reviews response."
}
},
"additionalProperties": false
}Search public Google Play applications by term MCP tool calls require a ReplyNodes API key or OAuth access token. Search public Google Play applications by term. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/search
| Argument | Type | Description |
|---|---|---|
| term* | string | Search term. |
| limit | integer | Maximum number of results; values outside 1..50 are rejected. |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"term"
],
"properties": {
"term": {
"type": "string",
"description": "Search term."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum number of results; values outside 1..50 are rejected."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch apps similar to a given Google Play package MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch apps similar to a given Google Play package. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/similar_apps/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | Google Play package id (e.g. com.nike.snkrs). |
| limit | integer | Maximum number of results; values outside 1..50 are rejected. |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Google Play package id (e.g. com.nike.snkrs)."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum number of results; values outside 1..50 are rejected."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch Google Play search-term suggestions MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch Google Play search-term suggestions. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/googleplay/suggest
| Argument | Type | Description |
|---|---|---|
| term* | string | Search term. |
| limit | integer | Maximum number of results; values outside 1..50 are rejected. |
| country | string | Two-letter storefront code. |
| language | string | Language code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"term"
],
"properties": {
"term": {
"type": "string",
"description": "Search term."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum number of results; values outside 1..50 are rejected."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"language": {
"type": "string",
"description": "Language code."
}
},
"additionalProperties": false
}Fetch a single Hacker News item and its comment tree MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch a single Hacker News item and its comment tree. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/item/{id}
| Argument | Type | Description |
|---|---|---|
| id* | integer | Hacker News item id. |
| depth | integer | Maximum comment-tree depth to resolve; values outside 1..10 are rejected. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"description": "Hacker News item id."
},
"depth": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Maximum comment-tree depth to resolve; values outside 1..10 are rejected."
}
},
"additionalProperties": false
}Search Hacker News via Algolia MCP tool calls require a ReplyNodes API key or OAuth access token. Search Hacker News via Algolia. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/search
| Argument | Type | Description |
|---|---|---|
| q* | string | Search query. |
| page | integer | Result page. |
| tags | string | Algolia HN Search tag filter (e.g. story, comment, ask_hn). |
| limit | integer | Maximum number of results; values outside 1..100 are rejected. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Search query."
},
"page": {
"type": "integer",
"minimum": 0,
"description": "Result page."
},
"tags": {
"type": "string",
"description": "Algolia HN Search tag filter (e.g. story, comment, ask_hn)."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results; values outside 1..100 are rejected."
}
},
"additionalProperties": false
}Fetch current Ask HN stories MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch current Ask HN stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/stories_ask
| Argument | Type | Description |
|---|---|---|
| page | integer | Result page. |
| limit | integer | Maximum number of results; values outside 1..100 are rejected. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Result page."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results; values outside 1..100 are rejected."
}
},
"additionalProperties": false
}Fetch current Hacker News best stories MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch current Hacker News best stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/stories_best
| Argument | Type | Description |
|---|---|---|
| page | integer | Result page. |
| limit | integer | Maximum number of results; values outside 1..100 are rejected. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Result page."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results; values outside 1..100 are rejected."
}
},
"additionalProperties": false
}Fetch current Hacker News job postings MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch current Hacker News job postings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/stories_job
| Argument | Type | Description |
|---|---|---|
| page | integer | Result page. |
| limit | integer | Maximum number of results; values outside 1..100 are rejected. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Result page."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results; values outside 1..100 are rejected."
}
},
"additionalProperties": false
}Fetch current Hacker News new stories MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch current Hacker News new stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/stories_new
| Argument | Type | Description |
|---|---|---|
| page | integer | Result page. |
| limit | integer | Maximum number of results; values outside 1..100 are rejected. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Result page."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results; values outside 1..100 are rejected."
}
},
"additionalProperties": false
}Fetch current Show HN stories MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch current Show HN stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/stories_show
| Argument | Type | Description |
|---|---|---|
| page | integer | Result page. |
| limit | integer | Maximum number of results; values outside 1..100 are rejected. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Result page."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results; values outside 1..100 are rejected."
}
},
"additionalProperties": false
}Fetch current Hacker News top stories MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch current Hacker News top stories. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/stories_top
| Argument | Type | Description |
|---|---|---|
| page | integer | Result page. |
| limit | integer | Maximum number of results; values outside 1..100 are rejected. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Result page."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results; values outside 1..100 are rejected."
}
},
"additionalProperties": false
}Fetch a public Hacker News user profile MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch a public Hacker News user profile. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/hackernews/user/{handle}
| Argument | Type | Description |
|---|---|---|
| handle* | string | Hacker News username. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"handle"
],
"properties": {
"handle": {
"type": "string",
"description": "Hacker News username."
}
},
"additionalProperties": false
}List applications from an iTunes collection MCP tool calls require a ReplyNodes API key or OAuth access token. List applications from an iTunes collection. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/list
| Argument | Type | Description |
|---|---|---|
| num | integer | Number of applications; values outside 1..200 are rejected. |
| lang | string | Language code. |
| country | string | Two-letter storefront code. |
| category | string | Provider category constant. |
| collection | string | Provider collection constant. |
| fullDetail | boolean | Request detail enrichment. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"num": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Number of applications; values outside 1..200 are rejected."
},
"lang": {
"type": "string",
"description": "Language code."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"category": {
"type": "string",
"description": "Provider category constant."
},
"collection": {
"type": "string",
"description": "Provider collection constant."
},
"fullDetail": {
"type": "boolean",
"description": "Request detail enrichment."
}
},
"additionalProperties": false
}List monitor changes MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/monitors/{id}/changes
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| limit | integer | query parameter |
| cursor | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "path parameter"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"cursor": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}Create a monitor asynchronously MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: POST /v1/monitors
| Argument | Type | Description |
|---|---|---|
| body* | any | |
| Idempotency-Key* | string | header parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"Idempotency-Key",
"body"
],
"properties": {
"body": {
"$ref": "#/$defs/MonitorCreateRequest"
},
"Idempotency-Key": {
"type": "string",
"minLength": 1,
"description": "header parameter"
}
},
"additionalProperties": false
}Get a monitor MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/monitors/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "path parameter"
}
},
"additionalProperties": false
}List monitors for the authenticated organization MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/monitors
| Argument | Type | Description |
|---|---|---|
| limit | integer | query parameter |
| cursor | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"cursor": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}List monitor runs MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/monitors/{id}/runs
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| limit | integer | query parameter |
| cursor | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "path parameter"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"cursor": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}Update frequency, pause state, or webhook MCP tool calls require a ReplyNodes API key or OAuth access token. Update frequency, pause state, or webhook configuration. The change is recorded immediately in the monitor service database (scheduling authority) and the external changedetection watch is reconciled asynchronously and with bounded retries; the response monitor object carries sync_state/sync_next_retry_at/sync_error_reason so a degraded engine (for example, a failed pause) is truthful and visible rather than silently dropped. HTTP: PATCH /v1/monitors/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| body* | any |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id",
"body"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "path parameter"
},
"body": {
"$ref": "#/$defs/MonitorUpdateRequest"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/reddit/post_by_id/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "path parameter"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/reddit/post_by_permalink
| Argument | Type | Description |
|---|---|---|
| permalink* | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"permalink"
],
"properties": {
"permalink": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}Read public App Store privacy details MCP tool calls require a ReplyNodes API key or OAuth access token. Read public App Store privacy details. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/privacy
| Argument | Type | Description |
|---|---|---|
| id* | string | public application identifier. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "public application identifier."
}
},
"additionalProperties": false
}Read public app ratings MCP tool calls require a ReplyNodes API key or OAuth access token. Read public app ratings. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/ratings
| Argument | Type | Description |
|---|---|---|
| id | string | public application identifier; provide this or appId. |
| appId | string | Bundle id; provide this or id. |
| country | string | Two-letter storefront code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"id": {
"type": "string",
"description": "public application identifier; provide this or appId."
},
"appId": {
"type": "string",
"description": "Bundle id; provide this or id."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
}
},
"additionalProperties": false
}Read a public PDF as Markdown for AI agents MCP tool calls require a ReplyNodes API key or OAuth access token. POST converts one public PDF URL to Markdown. GET and HEAD on the root are documentation-only; allowed methods are GET, HEAD, POST. This PDF to Markdown response is designed for read PDF, PDF for AI agents, extract PDF text, and PDF context workflows. Limits: 10 MiB source/download, 50 pages, 60 seconds, 20 conversions/IP/hour, 2 active conversions/IP, and a maximum encoded JSON response of 1 MiB including the trailing newline. MCP discovery identifies the sole read_document tool at https://mcp.replynodes.com/mcp. HTTP: POST https://pdf.replynodes.com/
| Argument | Type | Description |
|---|---|---|
| url* | string | Public PDF URL to read. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"pattern": "^https?://",
"description": "Public PDF URL to read."
}
},
"additionalProperties": false
}Read a page of public app reviews MCP tool calls require a ReplyNodes API key or OAuth access token. Read a page of public app reviews. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/reviews
| Argument | Type | Description |
|---|---|---|
| id | string | public application identifier; provide this or appId. |
| page | integer | Review page; values outside 1..10 are rejected. |
| sort | string | Provider review sort constant. |
| appId | string | Bundle id; provide this or id. |
| country | string | Two-letter storefront code. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"id": {
"type": "string",
"description": "public application identifier; provide this or appId."
},
"page": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Review page; values outside 1..10 are rejected."
},
"sort": {
"type": "string",
"description": "Provider review sort constant."
},
"appId": {
"type": "string",
"description": "Bundle id; provide this or id."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
}
},
"additionalProperties": false
}Search public App Store applications by term MCP tool calls require a ReplyNodes API key or OAuth access token. Search public App Store applications by term. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/search
| Argument | Type | Description |
|---|---|---|
| num | integer | Number of results; values outside 1..50 are rejected. |
| lang | string | Language code. |
| page | integer | Result page. |
| term* | string | Search term. |
| country | string | Two-letter storefront code. |
| idsOnly | boolean | Return ids without detail lookups. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"term"
],
"properties": {
"num": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Number of results; values outside 1..50 are rejected."
},
"lang": {
"type": "string",
"description": "Language code."
},
"page": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Result page."
},
"term": {
"type": "string",
"description": "Search term."
},
"country": {
"type": "string",
"description": "Two-letter storefront code."
},
"idsOnly": {
"type": "boolean",
"description": "Return ids without detail lookups."
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/reddit/search_posts
| Argument | Type | Description |
|---|---|---|
| sort | string | query parameter |
| limit | integer | query parameter |
| query* | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"query"
],
"properties": {
"sort": {
"type": "string",
"description": "query parameter"
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"query": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}List apps related to an application MCP tool calls require a ReplyNodes API key or OAuth access token. List apps related to an application. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/similar
| Argument | Type | Description |
|---|---|---|
| id | string | public application identifier; provide this or appId. |
| appId | string | Bundle id; provide this or id. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"properties": {
"id": {
"type": "string",
"description": "public application identifier; provide this or appId."
},
"appId": {
"type": "string",
"description": "Bundle id; provide this or id."
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/reddit/subreddit_posts/{subreddit}
| Argument | Type | Description |
|---|---|---|
| limit | integer | query parameter |
| category | string | query parameter |
| subreddit* | string | path parameter |
| time_filter | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"subreddit"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"category": {
"type": "string",
"description": "query parameter"
},
"subreddit": {
"type": "string",
"description": "path parameter"
},
"time_filter": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}Suggest public App Store search terms MCP tool calls require a ReplyNodes API key or OAuth access token. Suggest public App Store search terms. Returns the normalized public contract; raw provider records are internal to the runtime boundary and never cross the public gateway. HTTP: GET /v1/appstore/suggest
| Argument | Type | Description |
|---|---|---|
| term* | string | Search term. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"term"
],
"properties": {
"term": {
"type": "string",
"description": "Search term."
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/reddit/user_activity/{username}
| Argument | Type | Description |
|---|---|---|
| limit | integer | query parameter |
| username* | string | path parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"username"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"username": {
"type": "string",
"description": "path parameter"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/reddit/user_posts/{username}
| Argument | Type | Description |
|---|---|---|
| limit | integer | query parameter |
| category | string | query parameter |
| username* | string | path parameter |
| time_filter | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"username"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "query parameter"
},
"category": {
"type": "string",
"description": "query parameter"
},
"username": {
"type": "string",
"description": "path parameter"
},
"time_filter": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}Search the public web MCP tool calls require a ReplyNodes API key or OAuth access token. Search the public web through the normalized Web Search provider contract. HTTP: GET /v1/web/search
| Argument | Type | Description |
|---|---|---|
| date | string | Provider date filter. |
| lang | string | Language code. |
| site | string | Restrict results to a site or domain. |
| text* | string | Search query text. |
| limit | integer | Maximum number of results; values outside 1..100 are rejected. |
| start | integer | Zero-based result offset. |
| region | string | Search region. |
| engines | string | Comma-separated search engines. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"text"
],
"properties": {
"date": {
"type": "string",
"description": "Provider date filter."
},
"lang": {
"type": "string",
"description": "Language code."
},
"site": {
"type": "string",
"description": "Restrict results to a site or domain."
},
"text": {
"type": "string",
"description": "Search query text."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results; values outside 1..100 are rejected."
},
"start": {
"type": "integer",
"minimum": 0,
"description": "Zero-based result offset."
},
"region": {
"type": "string",
"description": "Search region."
},
"engines": {
"type": "string",
"description": "Comma-separated search engines."
}
},
"additionalProperties": false
}Extract public brand identity for a site MCP tool calls require a ReplyNodes API key or OAuth access token. Lightweight brand snapshot for one site URL: logos, colors, fonts, and basic public metadata. Prefer brand_retrieve for a fuller normalized brand profile or brand_search for fuzzy company-name discovery. HTTP: GET /v1/webcontext/brand
| Argument | Type | Description |
|---|---|---|
| url* | string | Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"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."
}
},
"additionalProperties": false
}Crawl same-origin links from a URL MCP tool calls require a ReplyNodes API key or OAuth access token. Crawl same-origin links starting from a URL and return normalized page results. max_pages/max_depth are clamped server-side regardless of the requested value. HTTP: GET /v1/webcontext/crawl
| Argument | Type | Description |
|---|---|---|
| url* | string | Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address. |
| max_depth | integer | Maximum link depth; clamped to 1..3. |
| max_pages | integer | Maximum pages to crawl; clamped to 1..50. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address."
},
"max_depth": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "Maximum link depth; clamped to 1..3."
},
"max_pages": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum pages to crawl; clamped to 1..50."
}
},
"additionalProperties": false
}Discover URLs belonging to a site MCP tool calls require a ReplyNodes API key or OAuth access token. Discover URLs belonging to a site without extracting page content. Results are deduplicated. HTTP: GET /v1/webcontext/map
| Argument | Type | Description |
|---|---|---|
| url* | string | Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address. |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"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."
}
},
"additionalProperties": false
}Fetch one URL as clean Markdown MCP tool calls require a ReplyNodes API key or OAuth access token. Fetch one URL and return clean, main-content Markdown plus normalized metadata, links, and images. Backed by a privately deployed webclaw-server instance; upstream implementation details are never exposed. HTTP: GET /v1/webcontext/scrape
| Argument | Type | Description |
|---|---|---|
| url* | string | Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address. |
| max_chars | integer | Maximum number of Unicode code points of Markdown to return (1-1048576). A longer page is cut at the last line break (or whitespace) in the second half of the budget; data.truncated is true and data.markdown_chars is the full length. Links and images are still listed from the full page. Priced the same with or without max_chars. A non-integer or out-of-range value is rejected with 400 invalid_request. |
| exclude_selectors | string | Comma-separated CSS selectors to exclude (e.g. "nav,.sidebar,footer"). |
| include_selectors | string | Comma-separated CSS selectors to include (e.g. "article,.content"). |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Target URL to fetch. Rejected if it is malformed, uses a disallowed scheme, or resolves to a private/loopback/link-local/cloud-metadata address."
},
"max_chars": {
"type": "integer",
"maximum": 1048576,
"minimum": 1,
"description": "Maximum number of Unicode code points of Markdown to return (1-1048576). A longer page is cut at the last line break (or whitespace) in the second half of the budget; data.truncated is true and data.markdown_chars is the full length. Links and images are still listed from the full page. Priced the same with or without max_chars. A non-integer or out-of-range value is rejected with 400 invalid_request."
},
"exclude_selectors": {
"type": "string",
"description": "Comma-separated CSS selectors to exclude (e.g. \"nav,.sidebar,footer\")."
},
"include_selectors": {
"type": "string",
"description": "Comma-separated CSS selectors to include (e.g. \"article,.content\")."
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/youtube/channel/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| language | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "path parameter"
},
"language": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/youtube/comments/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| limit | integer | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "path parameter"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "query parameter"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/youtube/playlist/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| language | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "path parameter"
},
"language": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/youtube/related/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| language | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "path parameter"
},
"language": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/youtube/search
| Argument | Type | Description |
|---|---|---|
| term* | string | query parameter |
| limit | integer | query parameter |
| language | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"term"
],
"properties": {
"term": {
"type": "string",
"description": "query parameter"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "query parameter"
},
"language": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/youtube/transcript/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| language | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "path parameter"
},
"language": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}MCP tool calls require a ReplyNodes API key or OAuth access token. HTTP: GET /v1/youtube/video/{id}
| Argument | Type | Description |
|---|---|---|
| id* | string | path parameter |
| language | string | query parameter |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "path parameter"
},
"language": {
"type": "string",
"description": "query parameter"
}
},
"additionalProperties": false
}| X-Exclude-Selectors |
| string |
| Comma-separated CSS selectors to remove (at most 10 entries, 512 bytes). |
| X-Include-Selectors | string | Comma-separated CSS selectors to keep (at most 10 entries, 512 bytes). |
{
"type": "object",
"$defs": {
"Error": {
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}
}
},
"Watch": {
"type": "object",
"required": [
"id",
"target",
"entity",
"topics",
"unavailable_topics",
"requested_frequency",
"effective_frequency",
"status",
"started_at",
"status_changed_at",
"archived_at",
"coverage",
"topic_intervals",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"status": {
"$ref": "#/$defs/WatchStatus"
},
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"$ref": "#/$defs/WatchWebhookConfig"
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"started_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"archived_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"topic_intervals": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopicInterval"
}
},
"status_changed_at": {
"type": "string",
"format": "date-time"
},
"unavailable_topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
},
"description": "Currently active subscriptions whose event families are unavailable; their topic intervals and history remain retained."
},
"effective_frequency": {
"anyOf": [
{
"$ref": "#/$defs/WatchFrequency"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"Monitor": {
"type": "object",
"required": [
"id",
"url",
"detector",
"frequency",
"paused"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"url": {
"type": "string",
"format": "uri"
},
"paused": {
"type": "boolean"
},
"webhook": {
"allOf": [
{
"$ref": "#/$defs/MonitorWebhook"
}
],
"description": "Secret is write-only and never returned"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"sync_state": {
"enum": [
"none",
"pending",
"running",
"retryable",
"failed",
"synced"
],
"type": "string",
"description": "External changedetection watch reconciliation state. PATCH persists frequency/paused immediately (the database is the scheduling authority); the worker applies the change to the engine's watch asynchronously and exposes convergence here. \"none\" means no external watch exists yet; \"pending\"/\"retryable\" are awaiting or retrying the application; \"running\" is being applied; \"failed\" exhausted the bounded retry budget and needs a new PATCH to re-arm; \"synced\" means the engine watch matches the record."
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "Canonical next scheduled run in UTC. Reported only while the monitor is schedulable: a monitor whose private watch is still being initialized cannot be claimed (ClaimDue requires initialization_state='ready'), so the field is omitted until initialization completes instead of implying an imminent run. Paused-but-initialized monitors still report their stored schedule; it is suspended until resume."
},
"sync_error_reason": {
"type": "string",
"description": "Most recent changedetection engine watch reconciliation failure reason"
},
"baseline_completed": {
"type": "boolean"
},
"sync_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable engine watch reconciliation"
},
"initialization_state": {
"enum": [
"pending",
"initializing",
"retryable",
"ready",
"failed"
],
"type": "string",
"description": "Asynchronous changedetection watch initialization state"
},
"initialization_error_reason": {
"type": "string",
"description": "Most recent changedetection initialization failure reason"
},
"initialization_next_retry_at": {
"type": "string",
"format": "date-time",
"description": "Next worker retry time for retryable initialization"
}
}
},
"CCIEvent": {
"type": "object",
"required": [
"id",
"schema_version",
"type",
"topic",
"subject",
"entity",
"summary",
"status",
"detected_at",
"first_observed_at",
"previous_observed_at",
"current_observed_at",
"data",
"source",
"before",
"after",
"detector",
"confidence",
"lineage",
"evidence",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"$ref": "#/$defs/CCIEventData"
},
"type": {
"enum": [
"pricing.price_changed",
"pricing.plan_added",
"pricing.plan_removed",
"product.launched",
"feature.launched",
"integration.added",
"integration.removed",
"customer.reference_added",
"case_study.added",
"positioning.changed"
],
"type": "string"
},
"after": {
"$ref": "#/$defs/CCIStateRef"
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"before": {
"$ref": "#/$defs/CCIStateRef"
},
"entity": {
"$ref": "#/$defs/CCIEventEntity"
},
"source": {
"$ref": "#/$defs/CCIEventSource"
},
"status": {
"enum": [
"active",
"superseded",
"retracted"
],
"type": "string"
},
"lineage": {
"$ref": "#/$defs/CCIEventLineage"
},
"subject": {
"type": "string"
},
"summary": {
"type": "string"
},
"detector": {
"$ref": "#/$defs/CCIEventDetector"
},
"evidence": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvidence"
}
},
"confidence": {
"$ref": "#/$defs/CCIConfidence"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"schema_version": {
"type": "integer"
},
"first_observed_at": {
"type": "string",
"format": "date-time"
},
"current_observed_at": {
"type": "string",
"format": "date-time"
},
"previous_observed_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"CCIMoney": {
"type": "object",
"required": [
"amount",
"currency",
"period"
],
"properties": {
"amount": {
"type": "number"
},
"period": {
"type": "string"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"WatchPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Watch"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorRun": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"changed": {
"type": "boolean"
},
"credits": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchTopic": {
"enum": [
"pricing",
"product",
"integrations",
"customers",
"positioning"
],
"type": "string"
},
"AppResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"description": "Provider-specific JSON payload. May be an object or a list; single lookups do not imply a one-element array. For example, hackernews_item returns an object with item and comments."
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"description": "Shared gateway success envelope for heterogeneous provider reads; data retains each adapter's public JSON shape.",
"additionalProperties": false
},
"CCIEvidence": {
"type": "object",
"required": [
"id",
"page_id",
"source_url",
"before_observation_id",
"after_observation_id",
"before_snapshot_id",
"after_snapshot_id",
"before_content_hash",
"after_content_hash",
"before_observed_at",
"after_observed_at",
"before_excerpt",
"after_excerpt",
"extractor",
"detector_version",
"provider",
"provider_version",
"provider_commit",
"method",
"model",
"model_config_hash",
"fields",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
},
"method": {
"type": "string"
},
"page_id": {
"type": "string"
},
"provider": {
"type": "string"
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"source_url": {
"type": "string"
},
"after_excerpt": {
"type": "string"
},
"before_excerpt": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"detector_version": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"after_observed_at": {
"type": "string",
"format": "date-time"
},
"after_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_content_hash": {
"type": "string"
},
"before_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"before_snapshot_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"after_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"before_observation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIPageMeta": {
"type": "object",
"required": [
"request_id",
"next_cursor",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIStateRef": {
"type": "object",
"required": [
"state_id",
"state_version",
"snapshot_ids",
"observation_ids",
"content_hashes"
],
"properties": {
"state_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"state_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/Monitor"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchEntity": {
"type": "object",
"required": [
"id",
"domain",
"display_name",
"observed_since",
"last_observed_at"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"observed_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"last_observed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchStatus": {
"enum": [
"active",
"paused",
"archived"
],
"type": "string"
},
"CCIEventData": {
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string"
},
"plan": {
"type": "string"
},
"price": {
"$ref": "#/$defs/CCIMoney"
},
"action": {
"type": "string"
},
"product": {
"type": "string"
},
"surface": {
"type": "string"
},
"category": {
"type": "string"
},
"new_price": {
"$ref": "#/$defs/CCIMoney"
},
"old_price": {
"$ref": "#/$defs/CCIMoney"
},
"change_kind": {
"type": "string"
},
"new_category": {
"type": "string"
},
"new_headline": {
"type": "string"
},
"old_category": {
"type": "string"
},
"old_headline": {
"type": "string"
},
"customer_name": {
"type": "string"
},
"billing_period": {
"type": "string"
},
"case_study_url": {
"type": "string"
},
"customer_domain": {
"type": "string"
},
"integration_name": {
"type": "string"
},
"integration_domain": {
"type": "string"
},
"target_market_delta": {
"type": "string"
},
"enterprise_messaging_added": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCIEventPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"RegistryData": {
"type": "object",
"required": [
"schema_version",
"service",
"version",
"documentVersion",
"documentHash",
"document",
"providers",
"callable_routes",
"openapi"
],
"properties": {
"openapi": {
"$ref": "#/$defs/RegistryOpenAPI"
},
"service": {
"type": "string"
},
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"providers": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryProvider"
}
},
"documentHash": {
"type": "string"
},
"schema_version": {
"enum": [
"v1"
],
"type": "string"
},
"callable_routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"documentVersion": {
"type": "string"
}
},
"additionalProperties": false
},
"ResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": true
},
"WatchWebhook": {
"type": "object",
"required": [
"url",
"secret"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true
}
},
"additionalProperties": false
},
"BrandLogoData": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The snapshot target URL the logos were extracted from."
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Public site/brand name detected on the page, when available."
},
"logos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"description": "Asset slot and format (e.g. logo.svg, favicon.ico)."
}
}
},
"description": "Candidate logo variants detected on the page."
},
"logo_url": {
"type": "string",
"format": "uri",
"description": "Primary brand logo URL, when available."
},
"og_image": {
"type": "string",
"format": "uri"
},
"favicon_url": {
"type": "string",
"format": "uri"
}
}
}
},
"additionalProperties": false
},
"CCIConfidence": {
"type": "object",
"required": [
"score",
"calibrated",
"method"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"score": {
"type": "number"
},
"method": {
"type": "string"
},
"calibrated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"CCITopicState": {
"type": "object",
"required": [
"id",
"topic",
"version",
"baseline",
"state",
"observed_from",
"observed_to",
"valid_from",
"valid_to",
"extractor",
"method",
"model",
"provider",
"provider_version",
"provider_commit",
"derived_from_page_ids",
"derived_from_snapshot_ids",
"derived_from_observation_ids",
"content_hashes",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"type": "object",
"additionalProperties": true
},
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"type": "integer"
},
"baseline": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"valid_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"extractor": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"valid_from": {
"type": "string",
"format": "date-time"
},
"observed_to": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"observed_from": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"content_hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"derived_from_page_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_snapshot_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"derived_from_observation_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"ErrorEnvelope": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"readme": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "integer"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"ErrorResponse": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorDetail"
}
},
"additionalProperties": false
},
"RegistryRoute": {
"type": "object",
"required": [
"provider",
"route",
"method",
"status",
"callable",
"auth_required",
"read_only",
"billing"
],
"properties": {
"tag": {
"type": "string"
},
"route": {
"type": "string"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"status": {
"type": "string"
},
"billing": {
"$ref": "#/$defs/RegistryBilling"
},
"callable": {
"type": "boolean"
},
"provider": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"schema_ref": {
"type": "string"
},
"operation_id": {
"type": "string"
},
"auth_required": {
"type": "boolean"
}
},
"additionalProperties": false
},
"WatchCoverage": {
"type": "object",
"required": [
"state",
"last_run_at"
],
"properties": {
"state": {
"enum": [
"initializing",
"healthy",
"degraded",
"failed"
],
"type": "string"
},
"last_run_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Watch"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"BrandFontsData": {
"type": "object",
"required": [
"domain",
"url",
"count"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"count": {
"type": "integer",
"minimum": 0
},
"fonts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"domain": {
"type": "string"
},
"words_count": {
"type": "integer",
"minimum": 0,
"description": "Word count reported by the rendered page metadata, when available."
}
},
"additionalProperties": false
},
"CCIEventEntity": {
"type": "object",
"required": [
"id",
"domain"
],
"properties": {
"id": {
"type": "string"
},
"domain": {
"type": "string"
}
},
"additionalProperties": false
},
"CCIEventSource": {
"type": "object",
"required": [
"page_ids",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"page_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"CCIRequestMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": false
},
"MonitorWebhook": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"secret": {
"type": "string",
"writeOnly": true,
"description": "HMAC secret used to sign deliveries. Write-only: it is never returned, logged, or rendered into the payload."
}
},
"description": "Signed webhook notification endpoint (issue #485). The URL must be a public HTTPS target; localhost/private/link-local/metadata/CGNAT destinations and non-HTTPS schemes are rejected unless the service is explicitly configured otherwise for a non-production harness. The secret is AES-256-GCM encrypted at rest. When a monitor change is detected the service POSTs the MonitorChangeEvent payload to this URL with headers X-ReplyNodes-Event-Id (<event_id>), X-ReplyNodes-Timestamp (Unix seconds of this attempt) and X-ReplyNodes-Signature (sha256=<hex> HMAC-SHA256 over timestamp + '.' + raw request body). Receivers should verify against the exact raw body bytes and enforce a 5-minute timestamp tolerance; retries re-sign with a fresh timestamp and the same event_id. Destination identity is URL-based and rotation is replace-on-update with no overlap: a PATCH changing only webhook.secret keeps the same destination identity and in-flight deliveries are signed with the current secret, while a PATCH changing the URL finalizes rows for the old URL as destination_replaced. When HTTPS is required, every redirect is revalidated and a redirect to a cleartext http target is rejected; the secret is write-only, AES-256-GCM encrypted at rest, and never returned or logged."
},
"RedditResponse": {
"type": "object",
"additionalProperties": true
},
"WatchFrequency": {
"enum": [
"24h",
"6h"
],
"type": "string"
},
"CCIEventLineage": {
"type": "object",
"required": [
"supersedes_event_id",
"retracted_event_id",
"lineage_event_id",
"correction_reason"
],
"properties": {
"lineage_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"correction_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retracted_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"supersedes_event_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIIntelligence": {
"type": "object",
"required": [
"entity",
"coverage",
"pages",
"topics",
"recent_events"
],
"properties": {
"pages": {
"type": "object",
"required": [
"monitored"
],
"properties": {
"monitored": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"entity": {
"$ref": "#/$defs/WatchEntity"
},
"topics": {
"type": "object",
"required": [],
"properties": {
"pricing": {
"$ref": "#/$defs/CCITopicState"
},
"product": {
"$ref": "#/$defs/CCITopicState"
},
"customers": {
"$ref": "#/$defs/CCITopicState"
},
"positioning": {
"$ref": "#/$defs/CCITopicState"
},
"integrations": {
"$ref": "#/$defs/CCITopicState"
}
},
"additionalProperties": false
},
"coverage": {
"$ref": "#/$defs/WatchCoverage"
},
"recent_events": {
"type": "array",
"items": {
"$ref": "#/$defs/CCIEvent"
}
}
},
"additionalProperties": false
},
"MonitorEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/Monitor"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
},
"initialization": {
"type": "string",
"description": "Present on the asynchronous 202 create response while the private watch is being initialized: \"pending\". The monitor is not schedulable until initialization completes, so next_run_at is omitted from the data block until then."
}
}
}
}
},
"MonitorPageMeta": {
"type": "object",
"required": [
"request_id",
"has_more"
],
"properties": {
"has_more": {
"type": "boolean"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
}
}
},
"RegistryBilling": {
"type": "object",
"required": [
"metered"
],
"properties": {
"metered": {
"type": "boolean"
},
"credit_cost": {
"type": "integer",
"format": "int64",
"minimum": 0
}
},
"additionalProperties": false
},
"RegistryOpenAPI": {
"type": "object",
"required": [
"version",
"document_hash",
"document"
],
"properties": {
"version": {
"type": "string"
},
"document": {
"type": "object",
"description": "The embedded OpenAPI document served unchanged."
},
"document_hash": {
"type": "string"
}
},
"additionalProperties": false
},
"SuccessResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"CCIEventDetector": {
"type": "object",
"required": [
"version",
"extractor_version",
"method",
"model",
"model_config_hash",
"provider",
"provider_version",
"provider_commit"
],
"properties": {
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"method": {
"enum": [
"deterministic",
"semantic"
],
"type": "string"
},
"version": {
"type": "string"
},
"provider": {
"type": "string"
},
"provider_commit": {
"type": "string"
},
"provider_version": {
"type": "string"
},
"extractor_version": {
"type": "string"
},
"model_config_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"CCIEventEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIEvent"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"RegistryProvider": {
"type": "object",
"required": [
"slug",
"name",
"description",
"status",
"routes"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/$defs/RegistryRoute"
}
},
"status": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"RegistryResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/RegistryData"
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
},
"BrandLogoResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandLogoData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"MarkdownHostError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"reason",
"retryable"
],
"properties": {
"code": {
"enum": [
"invalid_request",
"not_found",
"method_not_allowed",
"anonymous_limit_reached",
"source_excluded",
"upstream_blocked",
"upstream_unavailable",
"degraded",
"gateway_timeout",
"internal_error"
],
"type": "string"
},
"detail": {
"type": "string",
"description": "Safe caller guidance; present only for source_excluded."
},
"reason": {
"enum": [
"empty_target",
"bad_scheme",
"malformed_url",
"target_too_long",
"target_not_allowed",
"target_rejected",
"bad_option",
"route_disabled",
"target_not_found",
"method_not_allowed",
"daily_limit",
"publisher_excluded",
"access_check",
"target_unreachable",
"empty_content",
"content_too_large",
"provider_unavailable",
"service_degraded",
"target_timeout",
"client_closed",
"internal_error"
],
"type": "string",
"description": "Stable machine-readable failure reason; a closed set (values may be added, never renamed or removed)."
},
"status": {
"type": "integer",
"description": "Stable numeric detail code; present only for source_excluded (45101)."
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean",
"description": "True when sending the identical request again later can succeed without changing anything; it says nothing about how soon."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandFontsResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/BrandFontsData"
},
"meta": {
"$ref": "#/$defs/ResponseMeta"
}
},
"additionalProperties": false
},
"BrandRetrieveAsset": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
}
},
"BrandRetrieveColor": {
"type": "object",
"required": [
"hex"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer",
"format": "int64"
},
"usage": {
"type": "string"
}
}
},
"CCIHistoryEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"topic",
"current",
"history"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"current": {
"anyOf": [
{
"$ref": "#/$defs/CCITopicState"
},
{
"type": "null"
}
]
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/CCITopicState"
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/CCIPageMeta"
}
},
"additionalProperties": false
},
"MonitorChangeEvent": {
"type": "object",
"required": [
"event_version",
"event_id",
"event_type",
"monitor_id",
"run_id",
"detector",
"url",
"change_type",
"importance",
"summary",
"detected_at"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Monitored public URL."
},
"run_id": {
"type": "string",
"format": "uuid"
},
"summary": {
"type": "string",
"description": "Bounded, page-content-free human summary."
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"event_id": {
"type": "string",
"format": "uuid",
"description": "Stable canonical event identity (X-ReplyNodes-Event-Id); identical for every delivery attempt."
},
"evidence": {
"type": "object",
"properties": {
"bytes": {
"type": "integer",
"format": "int64"
},
"commit": {
"type": "string"
},
"repository": {
"type": "string"
},
"manifest_path": {
"type": "string"
},
"manifest_sha256": {
"type": "string"
}
},
"description": "Durable evidence/diff reference for this run (repository identifiers and content hashes, never page content)."
},
"event_type": {
"enum": [
"monitor.change.detected"
],
"type": "string"
},
"importance": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"monitor_id": {
"type": "string",
"format": "uuid"
},
"change_type": {
"type": "string",
"description": "Bounded detector change kind resolved by the detector/Jev judgement."
},
"detected_at": {
"type": "string",
"format": "date-time"
},
"event_version": {
"type": "integer",
"description": "Canonical envelope version. Receivers must branch on it."
},
"jev_confidence": {
"type": "number",
"description": "Raw Jev provider probability for a valid semantic judgement; present only when applicable and not calibrated confidence."
}
},
"description": "Versioned canonical change event delivered to a configured signed webhook. The payload is exact raw bytes persisted at event creation; Delivery re-signs those bytes on every attempt. organization_id and all secrets are internal and never appear in this document."
},
"MonitorHistoryPage": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/MonitorRun"
}
},
"meta": {
"$ref": "#/$defs/MonitorPageMeta"
}
}
},
"WatchCreateRequest": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchTopicInterval": {
"type": "object",
"required": [
"topic",
"enabled_at",
"disabled_at"
],
"properties": {
"topic": {
"$ref": "#/$defs/WatchTopic"
},
"enabled_at": {
"type": "string",
"format": "date-time"
},
"disabled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"WatchUpdateRequest": {
"type": "object",
"required": [],
"properties": {
"status": {
"$ref": "#/$defs/WatchStatus"
},
"topics": {
"type": "array",
"items": {
"$ref": "#/$defs/WatchTopic"
}
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/WatchWebhook"
},
{
"type": "null"
}
]
},
"requested_frequency": {
"$ref": "#/$defs/WatchFrequency"
}
},
"additionalProperties": false
},
"WatchWebhookConfig": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"WebContextMetadata": {
"type": "object",
"required": [
"title",
"description",
"author",
"image",
"favicon",
"language",
"published_date",
"site_name",
"word_count",
"url"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"site_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"word_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"published_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"AnonymousQuotaError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message",
"request_id",
"continuation"
],
"properties": {
"code": {
"const": "anonymous_limit_reached"
},
"message": {
"type": "string",
"example": "The anonymous daily limit has been reached. Get a free API key through the browser-approved claim flow described at https://replynodes.com/auth.md: 500 free credits are granted when the first long-lived API key is created and delivered."
},
"request_id": {
"type": "string"
},
"continuation": {
"$ref": "#/$defs/AnonymousContinuation"
}
}
}
}
},
"BrandSearchResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"query",
"count",
"matches"
],
"properties": {
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"matches": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"domain"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CreditTopupRequired": {
"type": "object",
"required": [
"code",
"balance_micro",
"price_micro",
"topup_url"
],
"properties": {
"code": {
"enum": [
"topup_required"
],
"type": "string"
},
"message": {
"type": "string"
},
"upgrade": {
"type": "object",
"required": [
"url",
"plans",
"pricing"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
},
"pricing": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Owner billing page for managing prepaid credits."
},
"price_micro": {
"type": "integer"
},
"balance_micro": {
"type": "integer"
}
},
"additionalProperties": false
},
"GatewayResponseMeta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
},
"additionalProperties": false
},
"MarkdownJsonResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": [
"string",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"image": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"author": {
"type": [
"string",
"null"
]
},
"favicon": {
"type": [
"string",
"null"
]
},
"language": {
"type": [
"string",
"null"
]
},
"site_name": {
"type": [
"string",
"null"
]
},
"word_count": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"published_date": {
"type": [
"string",
"null"
]
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"generated_at"
],
"properties": {
"request_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "Time the page was fetched (the cached time on a cache hit)."
}
}
}
}
},
"MonitorCreateRequest": {
"type": "object",
"required": [
"url",
"detector",
"frequency"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"webhook": {
"$ref": "#/$defs/MonitorWebhook"
},
"detector": {
"enum": [
"price",
"saas_pricing",
"product_change"
],
"type": "string"
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
}
},
"MonitorUpdateRequest": {
"type": "object",
"properties": {
"paused": {
"type": "boolean"
},
"webhook": {
"anyOf": [
{
"$ref": "#/$defs/MonitorWebhook"
},
{
"type": "null"
}
]
},
"frequency": {
"enum": [
"15m",
"1h",
"6h",
"12h",
"24h"
],
"type": "string"
}
},
"description": "Update frequency, pause state, or webhook configuration. The database update is authoritative and committed immediately; the changedetection engine watch is reconciled asynchronously by the monitor worker and the returned monitor reports convergence through sync_state/sync_next_retry_at/sync_error_reason instead of claiming engine success. Reconciliation failures retry with a bounded backoff budget and surface as sync_state=\"failed\" (a new PATCH re-arms it). An active monitor's schedule reflects the new preset promptly: changing frequency recomputes next_run_at from the change time using the new preset, and resuming a paused monitor schedules the next run one interval after the resume (never an immediate run), so the engine and the canonical schedule cannot drift onto different cadences. Immutable fields (url, detector) are rejected."
},
"ResearchWorkflowData": {
"type": "object",
"required": [
"workflow",
"domain",
"targets"
],
"properties": {
"domain": {
"type": "string"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/ResearchWorkflowTarget"
}
},
"workflow": {
"enum": [
"company-research",
"competitor-research"
],
"type": "string"
}
}
},
"AnonymousContinuation": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"const": "https://replynodes.com/auth.md",
"format": "uri"
}
}
},
"BrandRetrieveResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"fonts": {
"type": "array",
"items": {
"type": "string"
}
},
"logos": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"colors": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveColor"
}
},
"domain": {
"type": "string"
},
"favicon": {
"type": "string"
},
"og_image": {
"type": "string"
},
"backdrops": {
"type": "array",
"items": {
"$ref": "#/$defs/BrandRetrieveAsset"
}
},
"description": {
"type": "string"
},
"primary_logo": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id"
],
"properties": {
"stale": {
"type": "boolean"
},
"detail": {
"type": "string"
},
"request_id": {
"type": "string"
},
"next_cursor": {
"type": "string"
},
"availability": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"missing_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"contract_version": {
"type": "string"
}
}
}
}
},
"WebContextMapResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"count",
"urls"
],
"properties": {
"url": {
"type": "string"
},
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowTarget": {
"type": "object",
"required": [
"domain"
],
"properties": {
"logo": {
"type": "object",
"additionalProperties": true
},
"brand": {
"type": "object",
"description": "Real brand-kit retrieve output; omitted when that primitive fails.",
"additionalProperties": true
},
"domain": {
"type": "string"
},
"errors": {
"type": "object",
"description": "Per-primitive typed error codes; a failed primitive's output is omitted rather than fabricated.",
"additionalProperties": {
"type": "string"
}
},
"markdown": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
}
},
"styleguide": {
"type": "object",
"additionalProperties": true
}
}
},
"BrandStyleguideResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"domain",
"url",
"status"
],
"properties": {
"url": {
"type": "string"
},
"card": {
"type": "object",
"required": [
"source"
],
"properties": {
"border": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"background": {
"type": "string"
},
"box_shadow": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
},
"mode": {
"type": "string"
},
"radii": {
"type": "array",
"items": {
"type": "string"
}
},
"colors": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"source"
],
"properties": {
"role": {
"type": "string"
},
"count": {
"type": "integer"
},
"value": {
"type": "string"
},
"source": {
"type": "string"
}
},
"additionalProperties": false
}
},
"domain": {
"type": "string"
},
"status": {
"type": "string"
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"required": [
"variant",
"source"
],
"properties": {
"color": {
"type": "string"
},
"source": {
"type": "string"
},
"padding": {
"type": "string"
},
"variant": {
"type": "string"
},
"background": {
"type": "string"
},
"font_weight": {
"type": "string"
},
"border_radius": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shadows": {
"type": "array",
"items": {
"type": "string"
}
},
"spacing": {
"type": "array",
"items": {
"type": "string"
}
},
"typography": {
"type": "array",
"items": {
"type": "object",
"required": [
"source"
],
"properties": {
"tag": {
"type": "string"
},
"size": {
"type": "string"
},
"usage": {
"type": "string"
},
"family": {
"type": "string"
},
"source": {
"type": "string"
},
"weight": {
"type": "string"
},
"line_height": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"CCIIntelligenceEnvelope": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/CCIIntelligence"
},
"meta": {
"$ref": "#/$defs/CCIRequestMeta"
}
},
"additionalProperties": false
},
"WebContextBrandResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"brand"
],
"properties": {
"url": {
"type": "string"
},
"brand": {
"type": "object",
"required": [
"name",
"logo_url",
"logos",
"colors",
"fonts",
"favicon_url",
"og_image"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fonts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"logos": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"colors": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"hex",
"usage",
"count"
],
"properties": {
"hex": {
"type": "string"
},
"count": {
"type": "integer"
},
"usage": {
"type": "string"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"logo_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"og_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"favicon_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"WebContextCrawlResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"total",
"completed",
"errors",
"pages"
],
"properties": {
"url": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"depth",
"title",
"markdown",
"metadata"
],
"properties": {
"url": {
"type": "string"
},
"depth": {
"type": "integer"
},
"error": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"errors": {
"type": "integer"
},
"completed": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
},
"ResearchWorkflowResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"$ref": "#/$defs/ResearchWorkflowData"
},
"meta": {
"type": "object",
"additionalProperties": true
}
}
},
"WebContextScrapeResponse": {
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"required": [
"url",
"title",
"markdown",
"metadata",
"links",
"images",
"truncated",
"markdown_chars"
],
"properties": {
"url": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"images": {
"type": "array",
"items": {
"type": "string"
}
},
"markdown": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"$ref": "#/$defs/WebContextMetadata"
},
"truncated": {
"type": "boolean"
},
"markdown_chars": {
"type": "integer"
}
},
"additionalProperties": false
},
"meta": {
"$ref": "#/$defs/GatewayResponseMeta"
}
},
"additionalProperties": false
}
},
"required": [
"target"
],
"properties": {
"target": {
"type": "string",
"description": "path parameter"
},
"X-Format": {
"enum": [
"markdown",
"frontmatter"
],
"type": "string",
"description": "Output format: markdown (default) or frontmatter. Any other value returns 400 invalid_request with reason bad_option. Cannot be combined with Accept: application/json."
},
"X-Exclude-Selectors": {
"type": "string",
"example": "nav,footer,.sidebar",
"description": "Comma-separated CSS selectors to remove (at most 10 entries, 512 bytes)."
},
"X-Include-Selectors": {
"type": "string",
"example": "article,.post-body",
"description": "Comma-separated CSS selectors to keep (at most 10 entries, 512 bytes)."
}
},
"additionalProperties": false
}