{
  "openapi": "3.0.1",
  "info": {
    "title": "RSS Feed Aggregator — Feedly Alternative",
    "description": "Aggregate RSS, Atom, and JSON feeds into a clean article dataset. Discover advertised feeds from supplied websites, filter keywords, tag sources, and remove duplicates for research and recurring news workflows.",
    "version": "1.3",
    "x-build-id": "RXd4pepXgDqUGE6Nm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~feedly-alternative/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-feedly-alternative",
        "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/khadinakbar~feedly-alternative/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-feedly-alternative",
        "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/khadinakbar~feedly-alternative/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-feedly-alternative",
        "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",
        "required": [
          "sources"
        ],
        "properties": {
          "sources": {
            "title": "RSS feeds or websites to follow",
            "minItems": 1,
            "maxItems": 50,
            "type": "array",
            "description": "Public RSS, Atom, JSON Feed, or website URLs to aggregate, for example https://hnrss.org/frontpage or https://example.com/blog. Website URLs are checked for an advertised RSS, Atom, or JSON Feed link. Provide 1 to 50 distinct HTTP(S) URLs. This is not a Feedly account export, authenticated page, or browser bookmark.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "title": "Feed or website URL",
                  "type": "string",
                  "description": "A public HTTP(S) RSS/Atom/JSON Feed URL or website homepage, for example https://hnrss.org/frontpage. Homepage URLs are inspected for an advertised alternate feed link. The URL must be directly reachable without sign-in. Do not put private, password-protected, or local-network URLs here."
                },
                "name": {
                  "title": "Source name override",
                  "type": "string",
                  "description": "Optional label applied to entries from this source, for example Hacker News. When omitted, the feed title is used. Keep it short so exports remain readable. This does not rename the remote feed."
                },
                "tags": {
                  "title": "Source tags",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 20,
                  "description": "Optional labels copied to every entry from this source, for example technology and startups. Use up to 20 short labels to group sources across runs. Tags are additive and do not filter entries. This is not a list of feed URLs."
                }
              }
            }
          },
          "includeKeywords": {
            "title": "Include only articles matching these keywords",
            "type": "array",
            "description": "Optional case-insensitive terms that must match an article title, summary, content, author, or category, for example AI or cybersecurity. Leave empty to retain every parsed article. At least one term must match when this list is used. These are literal contains checks, not boolean search syntax or regular expressions.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude articles matching these keywords",
            "type": "array",
            "description": "Optional case-insensitive terms that remove matching articles, for example giveaway or sponsored. Leave empty to keep all otherwise eligible entries. Any matching exclusion wins over an include match. These are literal contains checks, not regular expressions or source-level blocks.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "publishedWithinHours": {
            "title": "Published within the last number of hours",
            "minimum": 0,
            "maximum": 8760,
            "type": "integer",
            "description": "Optional rolling age limit in hours, for example 24 for a daily monitoring feed. Use 0 to keep entries regardless of publication date, which is the default. Entries without a publication date remain eligible because many valid feeds omit one. This is not a scheduled polling interval.",
            "default": 0
          },
          "maxItems": {
            "title": "Maximum articles to return",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of normalized articles persisted for the entire run, for example 100. Defaults to 100 and accepts 1 to 1000. The actor stops writing before this cap so article event charges cannot exceed it. This is not a per-source limit.",
            "default": 100
          },
          "sortOrder": {
            "title": "Article sort order",
            "enum": [
              "newest",
              "oldest"
            ],
            "type": "string",
            "description": "Controls the dataset order after feeds are combined: newest keeps the most recent dated entries first, while oldest reverses that order. Entries without dates follow dated entries because their chronology cannot be verified. Defaults to newest. This does not change the order at the remote source.",
            "default": "newest"
          },
          "deduplicateBy": {
            "title": "Deduplicate combined feed entries by",
            "enum": [
              "url",
              "id",
              "none"
            ],
            "type": "string",
            "description": "Select URL to remove entries with the same canonical article URL, ID to use each feed entry's identifier, or none to preserve every source occurrence. URL is the default and suits most multi-source news monitoring. Deduplication happens only within this run. This does not mark or remember articles across separate runs.",
            "default": "url"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}