---
title: "Update a Discovery Agent creator profile"
method: PATCH
path: "/discovery/profiles/{profile_id}"
tags: ["Discovery Agent"]
---

# Update a Discovery Agent creator profile

`PATCH /discovery/profiles/{profile_id}`

Partially update one brief — only the fields you send are changed.

Changing `search_query` or `filters` re-derives the stored `title` and re-resolves the match set, and if the brief already backs a Vault list that list is re-synced. Editing a Reacher-generated brief flips its `source` to `user_created`; it is then yours and is no longer regenerated.

`is_deleted` is not settable here — use `DELETE /discovery/profiles/{profile_id}` — so a PATCH can never silently retire a brief.

Returns 404 if the profile does not exist or belongs to another shop. Requires `read_write` scope. Single-shop only.

## Path parameters

- `profile_id` integer, required — Discovery Agent profile ID.

## Headers

- `Idempotency-Key` string, nullable

## Request body

- DiscoveryProfileUpdateBody — Partial update for one Discovery Agent profile. Only the fields you send are touched. ``is_deleted`` is deliberately absent: deleting is ``DELETE /discovery/profiles/{profile_id}``, so a PATCH can never silently retire a brief.
  - `title` string, nullable
  - `description` string, nullable
  - `search_query` string, nullable
  - `filters` object, nullable — Replaces the stored demographic filters wholesale.
  - `is_active` boolean, nullable — Whether the brief is refreshed on the usual schedule.
  - `is_hidden` boolean, nullable — Hide the brief from the profile list without deleting it.
  - `hide_unsafe` boolean, nullable — Exclude brand-unsafe creators from the match set.

## Response `200`

Successful Response

- UpdateProfileResponse — Response model for profile update
  - `success` boolean, required
  - `profile` ProfileData, required — Profile data structure
    - `id` integer, required
    - `title` string, required
    - `description` string, nullable
    - `search_query` string, required
    - `filters` object, nullable
    - `source` string, required
    - `is_active` boolean, required
    - `vault_file_resource_id` integer, nullable
    - `is_hidden` boolean, required
    - `is_deleted` boolean, required
    - `hide_unsafe` boolean
    - `creator_count` integer, required
    - `last_search_at` string, date-time, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `deleted_at` string, date-time, nullable

## Other responses

- `400` — Validation error, or a missing/oversized Idempotency-Key.
- `403` — API key lacks `read_write` scope (`WRITE_NOT_PERMITTED`).
- `404` — Resource does not exist, or belongs to another shop.
- `409` — Idempotency conflict, or the resource already exists.
- `422` — Validation Error
- `429` — Write-tier rate limit (10/min, 50/hour, 100/day) exceeded.

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) · [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/reacherapp/reacher-data-api/revisions/5eefff009b5b/schema)
