Technical GEO Reports

Launch the Technical GEO bundle for a URL, then list, poll and retrieve each report. Reports run asynchronously. Agent Readiness, sometimes called AI readiness, uses report_type=agent_readiness.

GET/technical_geo_reports

List one Technical GEO report type for a project, newest first. Use this endpoint to find report ids and status before retrieving a full result.

Params:
  • project_idrequired
  • report_typerequired: crawlability, schema, content_readiness, discoverability, site_structure, robots_txt, agent_readiness, llms_txt, ai_visibility
  • status
  • batch_id
  • page
  • per_pagemaximum 100

GET/technical_geo_reports/:id

Get one report's current status. While it is running, poll_after_seconds is 15. A completed report includes result_data; a failed report includes error_message. A completed llms.txt report also returns result_data.content_version, the value an edit sends back, and metadata.output_language_code, plus manually_edited_at and the generated originals once the files were edited in the app, through the API or through MCP. An output_language_code of null means the llms.txt files keep the website's own language.

  • Params: project_id (required), report_type (required), and the report id in the URL.

POST/technical_geo_reports

Launches the full nine-report Technical GEO analysis bundle for a URL and country. Run all starts only when at least nine daily units remain. Each successfully created report uses one unit; a report that is not created uses none. Daily allocations vary by account. Each report runs in a background job. The response includes report_ids, keyed by report type, and tells the client to poll each id through the report detail endpoint. Requires a read_write scope API key.

Body (JSON):
  • project_idrequired
  • urlrequired
  • country_codeoptional, defaults to the project country
  • output_language_codeoptional, ISO 639-1 language the llms.txt files are written in, defaults to the project language; auto keeps the website's own language and is echoed back as auto; the other reports of the bundle are not affected

PATCH/technical_geo_reports/:id/content

Replace the llms.txt and llms-full.txt files of a completed llms.txt report without generating it again. edits holds the full new text of one or both files, and content_version must equal result_data.content_version of the report as last read. If the report changed since, the edit is refused with ERR_INVALID_PARAM, so read it again and resend. A file equal to the stored text is ignored, and the first edit keeps the generated files so they can be restored. changed_files lists the files that changed and is empty when nothing did.

  • Body (JSON): project_id (required), report_type (required, must be llms_txt), content_version (required, string), edits (required, object with llms_txt and/or llms_full_txt, each the whole new file, not blank and at most 200,000 characters), and the report id in the URL. Requires an API key with write scope and, for team members, create permission on GEO Optimization.

POST/technical_geo_reports/:id/revert_content

Discard every manual edit of an llms.txt report and restore the generated files kept on the first edit. manually_edited_at, original_llms_txt_content and original_llms_full_txt_content go back to null, and content_version changes. Returns ERR_INVALID_PARAM when the report has no manual edits.

  • Body (JSON): project_id (required), report_type (required, must be llms_txt), and the report id in the URL. Requires an API key with write scope and, for team members, create permission on GEO Optimization.