---
title: "Create a Discovery Agent creator profile"
method: POST
path: "/discovery/profiles"
tags: ["Discovery Agent"]
---

# Create a Discovery Agent creator profile

`POST /discovery/profiles`

Create a new creator brief for the shop — a `search_query` plus optional demographic `filters` — and resolve it immediately, so the response carries the `creator_count` it matched.

The brief is created with `source: user_created` and shows up in `GET /discovery/profiles` right away. The stored `title` is regenerated from the query and filters rather than kept verbatim, so read it back from the response instead of assuming what you sent.

Requires `read_write` scope and an `Idempotency-Key` header — a replay of the same key and body returns the original 201 rather than creating a second brief. Single-shop only.

## Headers

- `Idempotency-Key` string, nullable

## Request body

- DiscoveryProfileCreateBody — A new Discovery Agent creator brief.
  - `title` string, required — Human-readable name for the brief. The stored title is regenerated from `search_query` + `filters`, so it may come back normalized rather than exactly as sent.
  - `search_query` string, required — Natural-language description of the creators you want, e.g. 'skincare creators who film get-ready-with-me content'.
  - `description` string, nullable — Optional longer note about what this brief is for.
  - `filters` object, nullable — Structured demographic filters layered on top of the query — ``{"Gender": ["female"], "Age": ["25-34"], "Ethnicity": [...], "Region": [...]}``. Single values are normalized to arrays.

## Response `201`

Successful Response

- CreateProfileResponse — Response model for profile creation
  - `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
  - `creator_count` integer, required

## 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)
