---
title: "Create 1-50 profiles; with a proxy pool, timezones follow each slot's geo."
method: POST
path: "/v1/profiles"
---

# Create 1-50 profiles; with a proxy pool, timezones follow each slot's geo.

`POST /v1/profiles`

## Request

- Base URL: `http://127.0.0.1:10108`
- URL: `http://127.0.0.1:10108/v1/profiles`
- Auth: HTTP bearer

Creates 1 to 50 new profiles, each with a freshly generated fingerprint. With a proxy pool, each profile takes a slot and its timezone follows that proxy's measured exit, which sends traffic through the proxies. Datasets given here are assigned to the new profiles.

## Request body

- object
  - `content_dataset_id` string, uuid: Consume dataset for the Content slot
  - `count` integer, required
  - `identity_dataset_id` string, uuid: Fixed dataset: one unassigned row per new profile
  - `name_template` string: {n} becomes 1, 2, ...
  - `os` 'windows' | 'macos' | 'linux'
  - `proxy_pool_id` string, uuid
  - `tags` string[]

## Response `200`

The profiles created and, by index, the ones that could not be.

- object
  - `created` object[], required
    - `name` string, required
    - `profile_id` string, uuid, required
    - `proxy_slot` integer
    - `timezone` string, required
  - `failed` object[], required
    - `error` string, required
    - `index` integer, required
  - `location_warning` string
  - `timezone_warning` string

## Other responses

- `400`: The body is not valid: count outside 1-50, unknown os, empty tags, a dataset of the wrong mode or with too few rows, or a rotating pool.
- `401`: No bearer token, or not a token this app issued. The body is empty: it never says which.
- `403`: Refused by the plan: it no longer includes the local API (checked on every request), or it does not allow this action (profile or schedule limit, parallel runs). A request whose Host header is not loopback is also 403, with an empty body.
- `404`: The proxy pool or a dataset does not exist.
- `409`: No profile could be created, or a dataset cannot take these profiles.
- `429`: Too many expensive calls from this token: launch, script run, batch, run schedule now, create profiles and import proxies count together, 30 per rolling 60 s. The Retry-After header gives the seconds to wait.
- `500`: Veilus failed: storage could not be read or written, or a task panicked. The message says what failed; retrying rarely helps.

---

[API](https://skmtc.dev/veilus/apis/veilus-local-api.md) · [All operations](https://skmtc.dev/veilus/apis/veilus-local-api/llms.txt) · [OpenAPI document](https://skmtc.dev/veilus/apis/veilus-local-api/revisions/67ac3818f9d2?raw)
