---
title: "Set BLP Instrument Subscription"
method: POST
path: "/v1/blp/enroll"
---

# Set BLP Instrument Subscription

`POST /v1/blp/enroll`

Subscribe the authenticated Backstop Liquidity Provider (BLP) account to an
instrument, or unsubscribe it. A participant only receives backstop
allocations on the instruments it is subscribed to.

The subscription always applies to the authenticated account — there is no
account parameter. Program membership itself is set by Polymarket under the
participation agreement and cannot be changed here: an authenticated account
that is not enrolled receives a 404, matching
`GET /v1/blp/enrollment`.

**Subscribing sets the instrument's leverage to the program leverage of
3x** before the subscription takes effect, and the instrument's leverage is
then locked for as long as the subscription stands — `PATCH
/v1/trade/leverage` on a subscribed instrument rejects with
`blp_leverage_locked`. The margin mode is left as it is. Unsubscribing
releases the lock and leaves the leverage at 3x; set it to whatever you
want afterwards.

If the leverage change is rejected (for example the instrument's risk tier
caps leverage below 3x), the subscription is not applied and the rejection
is returned unchanged.

The call is idempotent — subscribing an already-subscribed instrument, or
unsubscribing one that was never subscribed, succeeds and changes nothing.
A repeated subscribe leaves the leverage as the first one set it.

## Request body

- BlpEnrollRequest
  - `instrument_id` integer, required — Instrument ID
  - `active` boolean, required — True subscribes the account to the instrument, false unsubscribes it.

## Response `200`

Subscription accepted.

- GenericAccepted
  - `status` 'ok', required

## Other responses

- `400` — Bad request — the request was malformed or failed validation (bad query parameters, unparseable body, invalid signature, or a domain pre-check). The `error` field is a human-readable validation detail.
- `401` — Unauthorized — missing or invalid `POLYMARKET-PROXY` / `POLYMARKET-SECRET` credentials. `error` is `unauthorized`.
- `404` — Not found — the endpoint is disabled on this venue (e.g. auto-cancel) or the route does not exist. `error` is `not_found`.
- `422` — Unprocessable Entity — the request was well-formed but a domain rule rejected it on its merits (insufficient balance, invalid leverage, proxy already exists, …). The body is the discriminated rejection (`status: err`) with the engine error identifier in `error`.
- `429` — Too Many Requests. `error` distinguishes the limit that was hit: `ip_rate_limited` (per-IP token bucket), `action_rate_limited` (per-account action rate), or `open_orders_limit` (resting open-order cap).
- `500` — Internal server error. `error` is `internal_error`.

---

[API](https://skmtc.net/polymarket/apis/polymarket-perps-http-api.md) · [All operations](https://skmtc.net/polymarket/apis/polymarket-perps-http-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/polymarket/polymarket-perps-http-api/versions/04930a2ca433/schema)
