{
  "openapi": "3.0.1",
  "info": {
    "title": "RSS & Atom Feed Reader + Change Monitor",
    "description": "Parse RSS, Atom and RDF feeds into structured JSON, then monitor new items, updates, feed failures and recoveries across runs.",
    "version": "0.1",
    "x-build-id": "c218jiPgqwU3s5WEk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/produkdigitalali~rss-atom-feed-reader-change-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-produkdigitalali-rss-atom-feed-reader-change-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/produkdigitalali~rss-atom-feed-reader-change-monitor/runs": {
      "post": {
        "operationId": "runs-sync-produkdigitalali-rss-atom-feed-reader-change-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/produkdigitalali~rss-atom-feed-reader-change-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-produkdigitalali-rss-atom-feed-reader-change-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "feedUrls": {
            "title": "Feed URLs",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "Public http(s) RSS, Atom, or RDF feed URLs to read.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 8192
            }
          },
          "feeds": {
            "title": "Advanced feed definitions",
            "type": "array",
            "description": "Optional objects with url, feedId, and label. Set feedId when a feed URL can change but should retain one monitoring identity.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 8192,
                  "title": "Feed URL",
                  "description": "Public http(s) RSS, Atom, or RDF feed URL to fetch."
                },
                "feedId": {
                  "type": "string",
                  "maxLength": 120,
                  "title": "Feed ID",
                  "description": "Optional stable monitoring identifier to keep the same feed identity when its URL changes."
                },
                "label": {
                  "type": "string",
                  "maxLength": 500,
                  "title": "Label",
                  "description": "Optional human-readable label copied to feed and item results."
                }
              },
              "additionalProperties": false
            },
            "default": []
          },
          "maxFeeds": {
            "title": "Maximum feeds",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of unique feeds processed in one run.",
            "default": 100
          },
          "maxItemsPerFeed": {
            "title": "Maximum items per feed",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum feed entries parsed and considered per feed in this run.",
            "default": 500
          },
          "includeSummary": {
            "title": "Include item summary",
            "type": "boolean",
            "description": "Include normalized plain-text summaries/descriptions in item results.",
            "default": true
          },
          "includeContent": {
            "title": "Include item content",
            "type": "boolean",
            "description": "Include normalized full content when supplied by the feed.",
            "default": true
          },
          "includeCombinedText": {
            "title": "Include AI-ready combined text",
            "type": "boolean",
            "description": "Include a plain-text field combining title, summary, and content for downstream AI/automation workflows.",
            "default": true
          },
          "includeRawHtml": {
            "title": "Include sanitized HTML",
            "type": "boolean",
            "description": "Also include sanitized summaryHtml/contentHtml when the feed supplies HTML.",
            "default": false
          },
          "maxItemTextCharacters": {
            "title": "Maximum output text per item",
            "minimum": 1000,
            "maximum": 250000,
            "type": "integer",
            "description": "Safety cap for each emitted text/summary/content field. Hashing still uses the full parsed text before this output cap.",
            "default": 100000
          },
          "removeTrackingParams": {
            "title": "Ignore common tracking query parameters",
            "type": "boolean",
            "description": "Removes common utm/fbclid/gclid-style parameters from stable feed/item URL identities. Feed fetches preserve the original path and query parameters.",
            "default": true
          },
          "monitorMode": {
            "title": "Monitoring mode",
            "type": "boolean",
            "description": "Persist feed/item hashes and classify current entries as NEW_ITEM, UPDATED_ITEM, or UNCHANGED across runs.",
            "default": false
          },
          "emitChangesOnly": {
            "title": "Emit changes only",
            "type": "boolean",
            "description": "When monitoring, omit UNCHANGED items. This also enables conditional HTTP requests when ETag/Last-Modified are available.",
            "default": false
          },
          "baselineOnly": {
            "title": "Baseline first run without emitting existing items",
            "type": "boolean",
            "description": "On a feed's first monitoring run, save current items as the baseline but suppress NEW_ITEM records. Later genuinely new/updated items are emitted normally.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor key",
            "maxLength": 200,
            "type": "string",
            "description": "Namespace for persistent monitoring state. Keep it unchanged across related scheduled runs.",
            "default": "default"
          },
          "compareUpdatedTimestamp": {
            "title": "Treat updated timestamp changes as item updates",
            "type": "boolean",
            "description": "Disabled by default because some feeds refresh updated timestamps without changing useful content.",
            "default": false
          },
          "useConditionalRequests": {
            "title": "Use ETag / Last-Modified conditional requests",
            "type": "boolean",
            "description": "When monitorMode + emitChangesOnly are enabled, use cached ETag/Last-Modified headers to avoid downloading unchanged feeds.",
            "default": true
          },
          "maxStateItemsPerFeed": {
            "title": "Maximum remembered item IDs per feed",
            "minimum": 100,
            "maximum": 10000,
            "type": "integer",
            "description": "Bounds persistent monitoring state. The effective state cap is never smaller than maxItemsPerFeed, preventing current items from being repeatedly misclassified as new.",
            "default": 2000
          },
          "emitFeedErrors": {
            "title": "Emit feed error records",
            "type": "boolean",
            "description": "Emit FEED_ERROR status records for feeds that cannot be fetched or parsed. Repeated identical errors are suppressed in changes-only mode.",
            "default": true
          },
          "emitRecoveryEvents": {
            "title": "Emit feed recovered records",
            "type": "boolean",
            "description": "Emit FEED_RECOVERED when a previously failing feed succeeds again.",
            "default": true
          },
          "includeKeywords": {
            "title": "Include keywords",
            "maxItems": 50,
            "type": "array",
            "description": "If provided, an item must contain at least one keyword in the selected filter fields.",
            "items": {
              "type": "string",
              "maxLength": 500
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "type": "array",
            "description": "Suppress items containing any of these keywords in the selected filter fields.",
            "items": {
              "type": "string",
              "maxLength": 500
            },
            "default": []
          },
          "includeRegex": {
            "title": "Include regex",
            "maxItems": 20,
            "type": "array",
            "description": "Optional case-insensitive regex patterns. An item must match at least one. Patterns are length-limited and executed with a timeout.",
            "items": {
              "type": "string",
              "maxLength": 300
            },
            "default": []
          },
          "excludeRegex": {
            "title": "Exclude regex",
            "maxItems": 20,
            "type": "array",
            "description": "Optional case-insensitive regex patterns. Matching items are suppressed. Patterns are length-limited and executed with a timeout.",
            "items": {
              "type": "string",
              "maxLength": 300
            },
            "default": []
          },
          "filterFields": {
            "title": "Fields used by filters",
            "uniqueItems": true,
            "type": "array",
            "description": "Fields searched by keyword/regex filters.",
            "items": {
              "type": "string",
              "enum": [
                "title",
                "summary",
                "content",
                "url",
                "author",
                "categories"
              ],
              "enumTitles": [
                "Title",
                "Summary",
                "Content",
                "URL",
                "Author",
                "Categories"
              ]
            },
            "default": [
              "title",
              "summary",
              "content"
            ]
          },
          "concurrency": {
            "title": "Feed concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Maximum number of feed requests processed concurrently.",
            "default": 10
          },
          "maxFeedSizeMb": {
            "title": "Maximum feed response size (MB)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Per-feed download safety limit after HTTP decompression.",
            "default": 10
          },
          "requestTimeoutSeconds": {
            "title": "Request timeout (seconds)",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "Timeout for each feed request.",
            "default": 30
          },
          "maxRetries": {
            "title": "Maximum retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries transient network, 429, and 5xx failures before recording a feed failure.",
            "default": 2
          },
          "userAgent": {
            "title": "HTTP User-Agent",
            "pattern": "^[^\\r\\n]*$",
            "maxLength": 512,
            "type": "string",
            "description": "Optional custom User-Agent sent to public feed servers.",
            "default": "Mozilla/5.0 (compatible; RSSAtomFeedReaderChangeMonitor/1.0)"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}