---
title: "Set the default location"
method: PUT
path: "/api/mcp/projects/{projectId}/default-location"
tags: ["Brand"]
---

# Set the default location

`PUT /api/mcp/projects/{projectId}/default-location`

## Request

- Base URL: `https://app.searchable.com`
- URL: `https://app.searchable.com/api/mcp/projects/{projectId}/default-location`
- Auth: HTTP bearer

Change an existing project's default location: the app's Knowledge Base Location. Send the `country`, plus a `state` or `city` where it matters, the same way project creation takes them; a country alone makes the whole country the default. The state or city is looked up and the place found is saved, never the text sent (`austin` with `state: "TX"` is saved as Austin, Texas). A state or city that can't be placed changes nothing: 400 `location_not_placed` for one that isn't recognised or a US city found in more than one state without its `state`, 503 `location_lookup_failed` when the lookup is unavailable. Tracked prompts that use the default move to the new place from their next run, and so do prompts whose only location is the old default; prompts with any other location keep them. Answers already collected stay under the place they were collected for. `dryRun: true` previews the change without making it. Needs the Member role and the `knowledge:manage` capability. A pitch project that is not currently active refuses with 409 `INACTIVE_PITCH_PROMPT_MUTATION`.

## Path parameters

- `projectId` string, uuid, required

## Request body

- SetDefaultLocationRequest
  - `country` string, required: ISO 3166-1 alpha-2 country code, e.g. `US`. Alone, it makes the whole country the default.
  - `state` string: The state: alone for the whole state (e.g. `California`), or with `city` for the state the city is in (e.g. `Oregon` for Portland). A US code such as `TX` works; elsewhere write the name.
  - `city` string: The city, e.g. `Austin`. A state's name here is taken as the state. A US city found in more than one state needs `state`.
  - `dryRun` boolean: Preview the change without making it.

## Response `200`

The default location was changed, or would be on a dry run.

- SetDefaultLocationResponse
  - `success` boolean: Present when the change was made (not on a dry run).
  - `dryRun` boolean: Present, `true`, on a dry run.
  - `changed` boolean: `false` when the place already was the default. Absent on a dry run.
  - `location` DefaultLocationPlace, required
    - `countryCode` string, required: ISO 3166-1 alpha-2 country code.
    - `city` string, nullable, required: The city, as the lookup names it; null for a state or a whole country.
    - `region` string, nullable, required: The state: the city's own, or the whole state when `city` is null.
    - `label` string, required: The place as the app names it, e.g. `Austin, United States`.
  - `previousLocation` string, nullable, required: The previous default, as the app names it.
  - `promptsMoved` integer, required: Tracked prompts that moved to the new place (would move, on a dry run).
  - `promptsKeepingOwnLocation` integer, required: Tracked prompts that keep their own location.

## Other responses

- `400`: Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.
- `401`: Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.
- `403`: Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.
- `404`: Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.
- `409`: Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.
- `429`: Rate limited. Usually the per-API-key REST limit (600 requests/minute); on Google-backed endpoints it can also relay an upstream Google rate limit. `Retry-After` (seconds) is present when the limit was applied by Searchable's own rate limiter; it may be absent when an upstream provider rate-limits.
- `503`: Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.

## Changes

- **2026-11-03** `28a5e2a65cd3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/searchable/apis/searchable-rest-api/changes/api/mcp/projects/:projectId/default-location/put.md)

---

[API](https://skmtc.dev/searchable/apis/searchable-rest-api.md) - [All operations](https://skmtc.dev/searchable/apis/searchable-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/searchable/apis/searchable-rest-api/revisions/a1cc70e46e73?raw)
