> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bravadotrade.com/llms.txt
> Use this file to discover all available pages before exploring further.

# POST /v2/trade/perps/deposits: Deposit pUSD

> Fund the user's Polymarket Perps account with pUSD from their deposit wallet. Scope trade.perps.

> [!NOTE]
>
> Sign each request with a fresh HMAC signature. The cURL and HTTP header values below are placeholders, not reusable credentials. For runnable signing code, use [request signing examples](https://docs.bravadotrade.com/authentication-examples.md).

Moves pUSD from the user's deposit wallet to their venue account. Scope `trade.perps`; `Idempotency-Key` is required.

pUSD you deposit to Perps leaves the deposit wallet. It cannot back prediction-market orders or be sent out with [`/v2/trade/withdraw`](https://docs.bravadotrade.com/api/trade/withdraw) until you [withdraw it from Perps](https://docs.bravadotrade.com/api/trade/perps/withdraw.md) back to the deposit wallet.

```text theme={null}
POST https://partner-api.bravadotrade.com/v2/trade/perps/deposits
```

### Body

**amount** `string` *required*

pUSD, as a decimal string with at most 6 decimal places. There is a minimum deposit: an amount below it is refused with `400 INVALID_BODY` and a message naming the minimum.

### Response

`202 Accepted`. Poll [`GET /v2/trade/perps/deposits/{deposit_id}`](https://docs.bravadotrade.com/api/trade/perps/deposits#get-one-deposit) until `state` is `credited`.

**deposit\_id** `string`

The deposit's id. Read it back by this id.

**amount** `string`

pUSD deposited.

**eoa** `string`

The user's EOA.

**tx\_hash** `string | null`

The deposit transaction.

**state** `string`

`prepared`, `pending` (sent, not yet confirmed and credited), `confirmed` (on chain, not yet credited by the venue), `credited`, `failed`, `reverted` or `not_found`.

**chain\_state** `string`

The transaction's state on chain, for example `PENDING`.

**venue\_state** `string`

The venue's view of the deposit, for example `UNSEEN`.

**fail\_reason** `string | null`

Why the deposit failed, when it did.

**created\_at** `string`

ISO-8601.

```json 202 theme={null}
{
  "deposit_id": "3f2a9c1e-5b7d-4e8f-9a0b-1c2d3e4f5a6b",
  "amount": "50",
  "eoa": "0xUserEoa...aabbccdd",
  "tx_hash": "0xtxhash...deposit01",
  "state": "pending",
  "chain_state": "PENDING",
  "venue_state": "UNSEEN",
  "fail_reason": null,
  "created_at": "2026-10-23T14:05:00.000Z"
}
```

### Errors

| Status | When |
| - | - |
| `400 Bad Request` | `INVALID_BODY`: below the minimum deposit (`details.rule: "min_deposit"`), or more than 6 decimal places (refused by request validation, with no `details`) |
| `403 Forbidden` | `OPERATION_DISABLED`: your policy does not allow deposits |
| `409 Conflict` | `USER_PROVISIONING_PENDING`: `reason` says why, for example `v2_wallet_required` |
| `422 Unprocessable Entity` | `INSUFFICIENT_BALANCE`: not enough pUSD on the deposit wallet |

Every Perps code and its retry rule: [Errors](https://docs.bravadotrade.com/api/trade/perps.md#errors). After a `504`, list [`GET /v2/trade/perps/deposits`](https://docs.bravadotrade.com/api/trade/perps/deposits) before acting again.

### Example

```bash cURL theme={null}
curl -X POST https://partner-api.bravadotrade.com/v2/trade/perps/deposits \
  -H "X-BRAVADO-API-KEY: $BRAVADO_API_KEY" \
  -H "X-BRAVADO-TIMESTAMP: <unix-ms>" \
  -H "X-BRAVADO-SIGNATURE: <signature-for-this-request>" \
  -H "Idempotency-Key: 0b5d3f8e-perps-deposit-0001" \
  -H "Content-Type: application/json" \
  -d '{ "amount": "50" }'
```

## Related

* [`GET /v2/trade/perps/deposits`](https://docs.bravadotrade.com/api/trade/perps/deposits) for every deposit, or one.
* [`GET /v2/trade/perps/readiness`](https://docs.bravadotrade.com/api/trade/perps/readiness): `needs_deposit` means the venue balance was read as zero.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.