---
title: "Assign a proxy pool to profiles; refuses profiles that already have a proxy unless force."
method: POST
path: "/v1/proxy-pools/{id}/assign"
---

# Assign a proxy pool to profiles; refuses profiles that already have a proxy unless force.

`POST /v1/proxy-pools/{id}/assign`

## Request

- Base URL: `http://127.0.0.1:10108`
- URL: `http://127.0.0.1:10108/v1/proxy-pools/{id}/assign`
- Auth: HTTP bearer

Points these profiles at the pool, one slot each, replacing how they reach the network from their next launch. Profiles that already have a proxy are refused unless `force` is true; their timezone is not regenerated.

## Path parameters

- `id` string, required

## Request body

- object
  - `force` boolean
  - `profile_ids` string[], required

## Response `200`

Every profile was assigned; each one's slot in the pool.

- object
  - `assigned` object[], required
    - `profile_id` string, uuid, required
    - `slot` integer, required
  - `pool_id` string, uuid, required

## Other responses

- `400`: The id is not a uuid, or `profile_ids` is empty or has duplicates.
- `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 pool or one of the profiles does not exist.
- `409`: Some profiles already have a proxy and `force` is false; nothing was assigned.
- `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)
