{
  "openapi": "3.0.1",
  "info": {
    "title": "CNN Articles Scraper",
    "description": "Fetches news articles from 12 CNN editions worldwide -- US, International, Espanol, Arabic, Brasil, Indonesia, Chile, Greece, Czechia, Portugal, Japan and Turkiye -- with headline, full body text, author, section, publish date and lead image, plus archive access back to 2011.",
    "version": "0.1",
    "x-build-id": "PbN3UV5nzDRH7fntB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~cnn-articles-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-cnn-articles-scraper",
        "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/scrapyx~cnn-articles-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-cnn-articles-scraper",
        "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/scrapyx~cnn-articles-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-cnn-articles-scraper",
        "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": {
          "editions": {
            "title": "CNN editions",
            "type": "array",
            "description": "Which CNN editions to pull from, in the SAME run. Each edition gets its own SEARCH_SUMMARY row. `us` and `intl` share one backend and overlap almost completely -- pick one unless you specifically want both hosts. `japan` is shallow by nature (a 30-item RSS feed is the only machine-readable index that host publishes).",
            "items": {
              "type": "string",
              "enum": [
                "us",
                "intl",
                "espanol",
                "arabic",
                "brasil",
                "indonesia",
                "chile",
                "greece",
                "czech",
                "portugal",
                "japan",
                "turkiye"
              ],
              "enumTitles": [
                "CNN US (cnn.com)",
                "CNN International (edition.cnn.com)",
                "CNN en Espanol",
                "CNN Arabic",
                "CNN Brasil",
                "CNN Indonesia",
                "CNN Chile",
                "CNN Greece",
                "CNN Prima News (Czechia)",
                "CNN Portugal",
                "CNN.co.jp (Japan)",
                "CNN Turk"
              ]
            },
            "default": [
              "us"
            ]
          },
          "sections": {
            "title": "Sections",
            "type": "array",
            "description": "Optional. On CNN Indonesia and CNN Turk each section has its own feed, so a section here becomes its own query with its own SEARCH_SUMMARY row (Indonesia: nasional, internasional, ekonomi, olahraga, teknologi, otomotif, edukasi, hiburan, gaya-hidup. Turk: turkiye, dunya, ekonomi, spor, saglik, teknoloji, kultur-sanat, yasam, otomobil, egitim, magazin). On CNN US, International and en Espanol sections instead narrow which archive partitions are fetched, and only when 'Include archive' is on. Other editions publish one combined feed and ignore this.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keyword filter (client-side)",
            "type": "array",
            "description": "Optional. Keep only articles whose title, feed keywords, description or body contain one of these words (case-insensitive, OR-combined). Applied AFTER fetching -- none of CNN's sitemaps or RSS feeds accepts a query parameter, so this narrows locally rather than pretending upstream filters it. Use the separate CNN Search Scraper for real server-side keyword search.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerEdition": {
            "title": "Max articles per edition",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on articles returned per edition (or per edition+section pair), applied after the date filter and before body fetching. Set to 0 for unlimited. With 'Include full article body' on, each returned article costs one extra request, so 0 against CNN Brasil's 500-article news feed means ~500 extra requests.",
            "default": 25
          },
          "includeFullBody": {
            "title": "Include full article body",
            "type": "boolean",
            "description": "Fetch each article's own page and extract the complete text, author, section, publish/modified dates and lead image. On by default -- the feeds themselves carry only a headline, URL and date. Turn it off for a fast metadata-only scan at one request per feed instead of one per article.",
            "default": true
          },
          "includeArchive": {
            "title": "Include archive (older articles)",
            "type": "boolean",
            "description": "Also walk the edition's archive sitemap index instead of only its rolling recent feed. CNN US/International partition the archive by section and month back to 2015 (2,535 partitions); CNN Chile goes back to 2011. Editions with no archive index (Japan, Turk) report that in their SEARCH_SUMMARY rather than failing.",
            "default": false
          },
          "maxArchivePartitions": {
            "title": "Max archive partitions per edition",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many archive sitemap files to fetch per edition when 'Include archive' is on, newest first. The flagship archive index lists 2,535 of them; fetching all would be a multi-hour run. Ignored when 'Include archive' is off.",
            "default": 12
          },
          "dateFrom": {
            "title": "Published from (YYYY-MM-DD)",
            "type": "string",
            "description": "Optional lower bound on publish date, inclusive. On CNN US, International, en Espanol and Chile this also skips whole archive partitions whose month falls outside the range. CNN Turk publishes RFC-822 dates that this filter cannot compare, so its rows are kept rather than silently dropped."
          },
          "dateTo": {
            "title": "Published to (YYYY-MM-DD)",
            "type": "string",
            "description": "Optional upper bound on publish date, inclusive. Same partition-skipping behaviour as 'Published from'."
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Upper bound on requests in flight at once across all editions in this run.",
            "default": 5
          },
          "minRequestInterval": {
            "title": "Min seconds between request starts",
            "minimum": 0,
            "type": "number",
            "description": "Shared pacing floor across every request this run makes. No CNN edition sets a Crawl-delay in robots.txt; this default is this portfolio's own politeness baseline, not a site requirement. Once this cap binds, raising concurrency buys nothing.",
            "default": 0.25
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "No bot mitigation was observed on any of the twelve editions during recon -- every host answered 200 cold and unproxied. Residential is still this portfolio's standard cloud default.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}