GEO Writer

Edit GEO Writer task content

Changed on

Edits the text of a completed task in place. edits maps dotted paths into result_data (for example title or sections.0.content) to replacement text. Only string fields that already exist can change: a path that does not resolve to text, a blank title, a value over 20,000 characters or an empty edits object is rejected with ERR_INVALID_PARAM and nothing is written. Send the result_version you last read with the edits: when the task was regenerated since, the request is refused with ERR_STALE_CONTENT (409), nothing is written and error.meta.result_version holds the current token. Without result_version the edits apply to whatever the task holds now. Values identical to the stored text are ignored, and the response lists the paths that actually changed. The first edit keeps a copy of the generated output so POST /intelligence_tasks/{id}/revert can restore it; regenerating the task replaces the edited content. Requires a read_write scope API key and, for team members, update permission on GEO Writer. On a product_listing task, description_html keeps only p, ul, ol, li, strong, em, h3 and br, with no attributes: other markup is stripped, not refused, so read the stored value from the response. A revert restores the generated description cleaned the same way.

patch/intelligence_tasks/{id}

Request

  • Base URL
    https://api.llmpulse.ai/api/v1
  • URL
    https://api.llmpulse.ai/api/v1/intelligence_tasks/{id}
  • Auth
    API key in header Authorization

Path parameters

idstring required

Numeric task ID or public_id string token

Request body

project_idinteger required
editsobject required

Dotted result_data paths (title, sections.0.content, key_points.2) mapped to their replacement text. Only string fields that already exist are editable; sections cannot be added or removed.

result_versionstring nullable

Optional. The result_version of the task as last read. When sent, the edit is refused with ERR_STALE_CONTENT (409) and nothing is written if the task was regenerated since. Omitted, null or empty, the edits apply to whatever the task holds now

Example request

{
  "edits": {
    "title": "How to measure AI visibility in 2026",
    "sections.0.content": "AI visibility is the share of AI answers that mention your brand."
  },
  "result_version": "1775642580"
}

Response

Updated task with the paths that changed

idinteger
public_idstring
project_idinteger
task_typestring
titlestring
statusstring
prompt_idinteger nullable
prompt_textstring nullable
agentic_modeboolean
custom_topicstring nullable
user_instructionsstring nullable
output_language_codestring nullable
word_countinteger nullable
result_dataobject nullable

The generated content once status is completed; null before that. A product_listing task returns title, summary, description_html (p, ul, ol, li, strong, em, h3 and br only), faq (question and answer pairs), seo_title, seo_description, image_alts (image_id and alt), changes (field and reason) and labels

error_messagestring nullable
estimated_timestring nullable
created_atstring date-time
processed_atstring date-time nullable
manually_edited_atstring date-time nullable

When the content was last edited by hand; null while the output is as generated

edited_by_user_idinteger nullable

User behind the last manual edit; null for an unedited task or an edit made from an embedded portal

result_versionstring

Concurrency token for content edits: send it back as result_version on PATCH /intelligence_tasks/{id} so an edit composed before a regeneration is refused with ERR_STALE_CONTENT (409). It is "0" until the task first completes, then changes each time a generation or regeneration replaces result_data, never on a manual edit or a revert. Treat it as opaque text

request_idstring
changed_pathsstring[]

Paths whose text actually changed; empty when every value matched the stored text

Example response

{
  "result_version": "1775642580"
}

Changes