{
  "openapi": "3.0.1",
  "info": {
    "title": "Article Extractor: News & Blog Text to Markdown",
    "description": "Extract news and blog articles from any URL, or find the newest via a site's RSS/Atom feed or sitemap. One clean row each: title, author, published and modified dates, lead image, language, main text as plain text and Markdown, word count, canonical URL. Only-new-articles mode for monitoring.",
    "version": "1.1",
    "x-build-id": "nQJT1ELzCDGLoAeFB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/humble-echidna~article-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-humble-echidna-article-extractor",
        "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/humble-echidna~article-extractor/runs": {
      "post": {
        "operationId": "runs-sync-humble-echidna-article-extractor",
        "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/humble-echidna~article-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-humble-echidna-article-extractor",
        "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": {
          "sites": {
            "title": "Websites, feeds or sitemaps",
            "type": "array",
            "description": "Sites to find articles on, one per line: a website or blog (https://blog.rust-lang.org/; its RSS/Atom feed is found from the page), a feed URL (https://blog.rust-lang.org/feed.xml), or a sitemap URL (https://example.com/news-sitemap.xml). The newest articles are extracted, up to maxArticlesPerSite. Only public http/https addresses on ports 80 and 443. Left out, it defaults to the Rust blog: pass an empty list to extract only articleUrls. Ignored when datasetId is set.",
            "default": [
              "https://blog.rust-lang.org/"
            ],
            "items": {
              "type": "string"
            }
          },
          "articleUrls": {
            "title": "Article URLs",
            "type": "array",
            "description": "Individual article pages to extract, one per line, e.g. https://blog.rust-lang.org/2024/11/28/Rust-1.83.0.html. Each is extracted as given (no discovery, no 'only new' memory). Combines with sites, which defaults to the Rust blog: set sites to an empty list to get only these pages. Ignored when datasetId is set.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Or: article URLs from a dataset (e.g. RSS & Atom Feed Reader results)",
            "type": "string",
            "description": "One of your Apify datasets, picked or given by id, e.g. RSS & Atom Feed Reader's results or the run this one is chained after: each item's article link is extracted like articleUrls; sites and articleUrls (with their defaults) are ignored and onlyNewArticles doesn't apply. Items with no web address in the link are skipped; duplicates are extracted once. Each result carries sourceTitle and sourceIndex from its item. At most the first 20,000 items and 10,000 article URLs are read, read-only."
          },
          "datasetUrlField": {
            "title": "Field with the article URL (dataset)",
            "type": "string",
            "description": "Only with datasetId: the item field that holds the article URL, e.g. `url`, or a dotted path such as `article.link`. Leave empty (the default) to find it automatically: the first of url, link and articleUrl that has a web address in the first 100 items, then the same names one level down (article.url)."
          },
          "maxArticlesPerSite": {
            "title": "Max articles per site",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "For each entry in sites: extract at most this many articles, newest first. 1 to 500, default 3.",
            "default": 3
          },
          "onlyNewArticles": {
            "title": "Only new articles since the last run",
            "type": "boolean",
            "description": "Default false. When true, for each site, skip the articles this search already returned in an earlier run (remembered in your Apify account, per site, discovery mode and URL patterns). The first run returns the newest ones. Good for scheduled monitoring.",
            "default": false
          },
          "discoverFrom": {
            "title": "Find articles from",
            "enum": [
              "auto",
              "feed",
              "sitemap"
            ],
            "type": "string",
            "description": "Where a site's list of articles comes from. `auto` (the default): its feed, else its sitemap. `feed`: feed only (RSS, Atom, JSON Feed). `sitemap`: sitemap only. A sitemap URL in sites is always read as a sitemap.",
            "default": "auto"
          },
          "urlPatterns": {
            "title": "Article URL patterns",
            "type": "array",
            "description": "Only extract discovered articles whose URL matches at least one of these, one per line, e.g. /blog/ or https://example.com/news/*. `*` matches anything (the pattern must then match the whole URL); without `*` a pattern matches anywhere in the URL. Case-insensitive. Most useful with sitemaps, which list every page of a site. Leave empty (the default) for all.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max articles per run",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many articles in total across all inputs, e.g. 20. Minimum 1; leave empty (the default) for no limit. The run also stops cleanly at the maximum cost per run you set in the run options, whichever comes first. Set it to keep a run small and quick."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}