---
title: "Update a GEO audit"
method: PATCH
path: "/geo_audits/{id}"
tags: ["GEO Audits"]
---

# Update a GEO audit

`PATCH /geo_audits/{id}`

## Request

- Base URL: `https://api.llmpulse.ai/api/v1`
- URL: `https://api.llmpulse.ai/api/v1/geo_audits/{id}`
- Auth: API key in header `Authorization`

Updates the schedule, the email alerts or the status. Making an audit recurring or resuming it counts against the plan limit of active recurring audits (ERR_LIMIT_REACHED). Requires a `read_write` scope API key and, for team members, update permission on GEO Audits.

## Path parameters

- `id` string, required

## Request body

- GeoAuditUpdateRequest
  - `project_id` integer
  - `cadence` 'once' | 'weekly' | 'monthly'
  - `schedule_day` integer: Weekly: 0 (Sunday) to 6. Monthly: 1 to 28.
  - `schedule_hour` integer: Hour of the day, 0 to 23, in the audit time zone
  - `status` 'active' | 'paused' | 'archived': paused stops scheduled runs, active resumes them, archived is the same as DELETE
  - `email_alerts` boolean

## Response `200`

The updated audit

- GeoAuditResponse
  - `id` string: Stable audit id
  - `audit_type` 'agent_readiness' | 'robots_txt' | 'crawlability' | 'schema' | 'content_readiness' | 'discoverability' | 'site_structure'
  - `target` string: The audited domain (site-wide types) or page URL, normalized
  - `country_code` string, nullable
  - `cadence` 'once' | 'weekly' | 'monthly'
  - `status` 'active' | 'paused' | 'archived'
  - `paused_reason` string, nullable: Null unless status is paused. user (paused by hand), unreachable (three runs in a row could not reach the site) or quota (the account has more active recurring audits than its plan allows; resume it once there is room)
  - `schedule` GeoAuditSchedule, nullable: Present for weekly and monthly audits. day is 0 (Sunday) to 6 for weekly audits and 1 to 28 for monthly ones; hour is in timezone.
    - `day` integer
    - `hour` integer
    - `timezone` string
  - `next_run_at` string, date-time, nullable
  - `email_alerts` boolean
  - `recurring_available` boolean: Whether this audit type can run weekly or monthly
  - `checks_tracked` boolean: Whether runs of this type produce findings and issues, or a score only
  - `latest_run` GeoAuditRun, nullable: One run of an audit. Null where an audit has no run yet (latest_run) or a comparison has no earlier run (from_run).
    - `sequence` integer: Run number within the audit, starting at 1
    - `status` 'queued' | 'running' | 'completed' | 'failed' | 'unreachable'
    - `trigger` 'scheduled' | 'manual' | 'api' | 'mcp' | 'legacy_import'
    - `score` number, nullable
    - `grade` string, nullable
    - `score_delta` number, nullable: Score change against the previous completed run
    - `comparable_to_previous` boolean: False when the checks or the audit settings changed since the previous run, so a diff may reflect that change
    - `new_issues` integer
    - `fixed_issues` integer
    - `regressed_issues` integer
    - `error` string, nullable
    - `engine_version` string, nullable
    - `created_at` string, date-time
    - `finished_at` string, date-time, nullable
    - `app_url` string
  - `open_issues` integer
  - `open_critical_issues` integer
  - `created_at` string, date-time
  - `app_url` string
  - `project_id` integer
  - `request_id` string

## Other responses

- `403`: API key lacks write permission
- `404`: Resource not found
- `422`: Invalid parameters

## Changes

- **2026-10-09** `61976d9236d8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/llmpulse/apis/llm-pulse-api/changes/geo_audits/:id/patch.md)

---

[API](https://skmtc.dev/llmpulse/apis/llm-pulse-api.md) - [All operations](https://skmtc.dev/llmpulse/apis/llm-pulse-api/llms.txt) - [OpenAPI document](https://skmtc.dev/llmpulse/apis/llm-pulse-api/revisions/38a31f123641?raw)
