---
title: "Admin Copy Set"
method: POST
path: "/api/price-compare/admin/sets/{set_id}/copy"
tags: ["Price Compare"]
---

# Admin Copy Set

`POST /api/price-compare/admin/sets/{set_id}/copy`

## Request

- Base URL: `https://data.getplace.io` (the document declares no server; this is the origin it was published from)
- URL: `https://data.getplace.io/api/price-compare/admin/sets/{set_id}/copy`
- Auth: OAuth 2
  - Password
  - Token URL: `/api/auth/login`

Seed one account's benchmark into another account.

Two calls by design. The first (`mode="ask"`, the default) writes nothing
and answers the two questions worth asking before a write: does the target
already hold a copy of this benchmark, and will it show any data once it
lands. The second names what to do about it.

The copy always gets a fresh server-generated id — `price_compare_sets.id`
is a global primary key, so reusing the source's would collide with it.

## Path parameters

- `set_id` string, required

## Request body

- CopyRequest
  - `target_user_id` string, required
  - `new_name` string, nullable
  - `mode` 'ask' | 'overwrite' | 'duplicate'

## Response `200`

Successful Response

- CopyResponse
  - `outcome` 'ask' | 'created' | 'overwritten', required
  - `source_id` string, required
  - `target` Owner, required
    - `user_id` string, required
    - `email` string, nullable
    - `name` string, nullable
    - `source` 'local' | 'getplace'
    - `allow_menu_access` boolean, nullable
    - `can_sign_in` boolean, nullable
    - `grants` GrantSummary[]
      - `country_code` string, required
      - `chain_count` integer
      - `cities` string[]
  - `access` AccessReport, required: Whether an account would actually see data in a benchmark. Copying a set is not enough on its own: the Go API filters menu data by the account's grants, so a benchmark whose brands are not granted opens empty — which reads as a broken screen rather than as missing permissions. This report is what turns that into a sentence before anything is written.
    - `ok` boolean, required
    - `unrestricted` boolean
    - `allow_menu_access` boolean
    - `required` RequiredAccess, required: The data a benchmark needs its owner to be allowed to see.
      - `chain_ids` integer[]
      - `city_id` integer, nullable
      - `country` string, nullable
    - `missing_chain_ids` integer[]
    - `city_blocked` boolean
    - `note` string, nullable
  - `existing_copies` ExistingCopy[]
    - `id` string, required
    - `name` string, required
    - `copied_at` string, nullable
    - `updated_at` string, date-time, required
    - `edited_since_copy` boolean
  - `set_id` string, nullable
  - `name` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/getplace/apis/getplace-insights-api.md) - [All operations](https://skmtc.dev/getplace/apis/getplace-insights-api/llms.txt) - [OpenAPI document](https://skmtc.dev/getplace/apis/getplace-insights-api/revisions/0f337387603f?raw)
