---
title: "Replace a project's GEO settings"
method: PATCH
path: "/v1/projects/{projectId}/geo/settings"
tags: ["GEO"]
---

# Replace a project's GEO settings

`PATCH /v1/projects/{projectId}/geo/settings`

Writes the full settings document and re-arms the recurring scan. Engines must be ids from the model catalog this organization can see (the ones `GET /geo/settings` returns) and languages must be supported languages; an unknown value is rejected with a 400 instead of being replaced by a default. Zero data retention is forced off without the ZDR add-on, and engines that are not visible to this caller keep their stored selection. Competitors are managed through the competitors endpoints and are not part of this payload.

## Path parameters

- `projectId` string, required

## Request body

- PatchGeoSettingsRequest
  - `companyName` string, required
  - `aliases` string[], required
  - `languages` string[], required
  - `engines` string[], required
  - `enforceZdr` boolean, required
  - `nonZdrApprovedEngines` string[], required
  - `enabled` boolean, required
  - `scanIntervalHours` integer, required — 24, 48, 72, 168, 336, 720

## Response `200`

Settings updated successfully

- GeoSettingsResponse
  - `configured` boolean, required — Whether the analytics backend is configured.
  - `settings` GeoSettings, nullable, required
    - `id` string, required
    - `organizationId` string, required
    - `projectId` string, required
    - `companyName` string, required
    - `aliases` string[], required
    - `competitors` string[], required
    - `languages` string[], required
    - `engines` string[], required
    - `enforceZdr` boolean, required
    - `nonZdrApprovedEngines` string[], required
    - `enabled` boolean, required
    - `scanIntervalHours` integer, required
    - `scanStartedAt` string, nullable, required
    - `lastScanAt` string, nullable, required
    - `isScanning` boolean, required
    - `createdAt` string, required
    - `updatedAt` string, required
  - `organization` object, required
    - `id` string, required
    - `slug` string, required
    - `name` string, required
    - `logo` string, nullable, required

## Other responses

- `400` — Invalid request
- `401` — Missing or invalid API key
- `402` — GEO plan or available AI credits required
- `403` — Forbidden
- `404` — Organization, project or resource not found
- `409` — Conflict
- `500` — Internal server error
- `503` — Authentication or billing service unavailable

## Changes

- **2026-09-02** `fd2fc44c9208` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/usenotra/apis/notra-api/changes/v1/projects/:projectId/geo/settings/patch.md)

---

[API](https://skmtc.dev/usenotra/apis/notra-api.md) · [All operations](https://skmtc.dev/usenotra/apis/notra-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/usenotra/notra-api/revisions/fd2fc44c9208/schema)
