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.
project_idrequiredreport_typerequired: crawlability, schema, content_readiness, discoverability, site_structure, robots_txt, agent_readiness, llms_txt, ai_visibilitystatusbatch_idpageper_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 reportidin 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.
project_idrequiredurlrequiredcountry_codeoptional, defaults to the project countryoutput_language_codeoptional, ISO 639-1 language the llms.txt files are written in, defaults to the project language;autokeeps the website's own language and is echoed back asauto; 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 bellms_txt),content_version(required, string),edits(required, object withllms_txtand/orllms_full_txt, each the whole new file, not blank and at most 200,000 characters), and the reportidin 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 bellms_txt), and the reportidin the URL. Requires an API key with write scope and, for team members, create permission on GEO Optimization.