---
title: "Admin Preview Transfer"
method: POST
path: "/api/price-compare/admin/sets/preview"
tags: ["Price Compare"]
---

# Admin Preview Transfer

`POST /api/price-compare/admin/sets/preview`

## 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/preview`
- Auth: OAuth 2
  - Password
  - Token URL: `/api/auth/login`

What copying these benchmarks into that account would do. Writes nothing.

One endpoint for many sets rather than one call each, because the expensive
part is resolving the target: every single-set dry run opened its own
connection to the GetPlace2 production database and looked up the SAME
account again. Selecting fifty rows meant fifty connections to somebody
else's production. Here the account is resolved once and the answer is
computed per set — the access report genuinely differs, because the brands
differ, but the account does not.

## Request body

- PreviewRequest
  - `ids` string[], required
  - `target_user_id` string, required

## Response `200`

Successful Response

- PreviewResponse
  - `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[]
  - `items` PreviewItem[]
    - `set_id` string, required
    - `name` string, required
    - `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

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