{
  "openapi": "3.0.1",
  "info": {
    "title": "llms.txt Generator & Checker - llms-full.txt, AI SEO (GEO)",
    "description": "Generate llms.txt and llms-full.txt for any website from its sitemap or a crawl, with sections and AI descriptions, or validate existing llms.txt files in bulk. $2 per 1,000 pages or sites.",
    "version": "0.1",
    "x-build-id": "Tb6lt4MbnKdepEJX5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tidytools~llms-txt-generator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tidytools-llms-txt-generator",
        "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/tidytools~llms-txt-generator/runs": {
      "post": {
        "operationId": "runs-sync-tidytools-llms-txt-generator",
        "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/tidytools~llms-txt-generator/run-sync": {
      "post": {
        "operationId": "run-sync-tidytools-llms-txt-generator",
        "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": {
          "website": {
            "title": "Website",
            "type": "string",
            "description": "Main input in generate mode (the default): the website to describe, e.g. https://example.com or example.com. A path (e.g. https://docs.example.com/academy) limits llms.txt to that section (when that page links to nothing under its own path, e.g. docs sites that give every page its own folder, the folder one level up is used; never the whole site); the home page is still read for the site name and summary. In validate mode it is added to the list below."
          },
          "mode": {
            "title": "What to do",
            "enum": [
              "generate",
              "validate"
            ],
            "type": "string",
            "description": "Generate builds llms.txt and llms-full.txt from a site's pages. Validate checks the llms.txt that websites already publish (format and a sample of links) and scores it. Values: generate = Generate llms.txt for one website; validate = Validate existing llms.txt files (many websites).",
            "default": "generate"
          },
          "websites": {
            "title": "Websites to validate",
            "type": "array",
            "description": "Validate mode only: websites whose /llms.txt should be checked, one per line (up to 5,000). Lines with several domains separated by commas or spaces are split; lines that are not websites get an error row and are not charged.",
            "items": {
              "type": "string"
            }
          },
          "maxPages": {
            "title": "Max pages",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "How many pages to include. The home page and top-level pages are picked first.",
            "default": 100
          },
          "includeFullText": {
            "title": "Also create llms-full.txt",
            "type": "boolean",
            "description": "llms-full.txt contains the full Markdown text of every included page (no extra charge).",
            "default": true
          },
          "cleanFullText": {
            "title": "Remove navigation and footers from llms-full.txt",
            "type": "boolean",
            "description": "Keep only the main content of each page in llms-full.txt (menus, footers, cookie notices and \"Skip to content\" links are removed). Turn off if a site loses real content.",
            "default": true
          },
          "aiSiteSummary": {
            "title": "AI site summary",
            "type": "boolean",
            "description": "Write the summary line of llms.txt with AI from the home page content (no extra charge). Off = use the home page's meta description.",
            "default": true
          },
          "aiPageDescriptions": {
            "title": "AI descriptions for pages without one",
            "type": "boolean",
            "description": "Pages without a meta description get a one-line AI-written description (charged as an extra event).",
            "default": false
          },
          "siteName": {
            "title": "Site name (optional)",
            "type": "string",
            "description": "Use this as the llms.txt title (# line) instead of the name detected from the home page."
          },
          "summary": {
            "title": "Summary (optional)",
            "type": "string",
            "description": "Use this as the summary line (> line). When set, no AI summary is written."
          },
          "sectionOrder": {
            "title": "Section order",
            "type": "array",
            "description": "Optional section names to put first, in this order, e.g. Docs, Products, Blog. Other sections follow; Optional stays last.",
            "items": {
              "type": "string"
            }
          },
          "sitemapUrl": {
            "title": "Sitemap URL",
            "type": "string",
            "description": "Optional. Read pages from this sitemap (or sitemap index) instead of discovering sitemaps automatically."
          },
          "includeUrlPatterns": {
            "title": "Include URL patterns",
            "type": "array",
            "description": "Optional glob patterns; only matching pages are included, e.g. https://example.com/docs/**. When set, a path in \"Website\" does not limit the scope.",
            "items": {
              "type": "string"
            }
          },
          "excludeUrlPatterns": {
            "title": "Exclude URL patterns",
            "type": "array",
            "description": "Optional glob patterns to leave out, e.g. **/tag/**",
            "items": {
              "type": "string"
            }
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Leave out pages that the site's robots.txt disallows for crawlers (the \"*\" rules).",
            "default": false
          },
          "linkSampleSize": {
            "title": "Links to test per site (validate mode)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "How many links from each llms.txt are requested to find broken ones. 0 = format checks only.",
            "default": 10
          },
          "maxConcurrency": {
            "title": "Parallel pages",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many pages are processed at the same time.",
            "default": 8
          },
          "httpVia": {
            "title": "Plain HTTP requests from",
            "enum": [
              "auto",
              "backend",
              "direct",
              "vm"
            ],
            "type": "string",
            "description": "Some sites block requests from data centers. Auto retries from a second network before falling back to a real browser. If both are refused, Auto also tries our second server (Oracle, different IP) before a real browser.",
            "default": "auto"
          },
          "pageTimeoutSecs": {
            "title": "Time limit per page (seconds)",
            "minimum": 0,
            "maximum": 900,
            "type": "integer",
            "description": "Generate mode: a page that takes longer to read (its title, description and text, all fallbacks included) is left out, listed in SUMMARY.timedOutPages and not charged. 0 = no limit.",
            "default": 120
          },
          "siteTimeoutSecs": {
            "title": "Time limit per website in validate mode (seconds)",
            "minimum": 0,
            "maximum": 900,
            "type": "integer",
            "description": "Validate mode: a website whose llms.txt, llms-full.txt and link sample take longer than this is reported with errorType \"timeout\" and not charged. 0 = no limit.",
            "default": 120
          },
          "proxyConfiguration": {
            "title": "Proxy (optional)",
            "type": "object",
            "description": "Only used for requests sent from Apify's network. Apify proxy usage is billed to your Apify account."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}