# Check your positions at a minute

> Each position judged at one market minute: only what was known at that minute, never anything later in the day.

Source: https://firmtape.com/docs/developers/orders/positions-check

Each position judged at one market minute: only what was known at that minute, never anything later in the day.

`GET /api/positions/check`

Plan ORDERS · Key scope orders · Limit 20,000 calls a day on Orders API, 100,000 on Orders Team, per account · Version 1.0.0 · Since 2026-10-04

**This endpoint serves:** [ORDERS: POSITIONS panel and editor](https://firmtape.com/docs/orders#positions-panel), [ORDERS: Conditions and the not counted list](https://firmtape.com/docs/orders#positions-conditions). **Plan:** [ORDERS](https://firmtape.com/features/orders). Free on every finished session. Today's ledger, live, and the live POSITIONS check are the ORDERS plan.

## Parameters

| Name | What it does | Default | Error |
| --- | --- | --- | --- |
| `day` query, string | `YYYY-MM-DD`. | today |  |
| `t` query, string | `HH:MM` ET. | the latest minute |  |
| `id` query, string | One position; without it, all of them. |  | not_found |

## Response

One check per position.

| Field | Meaning | Unit |
| --- | --- | --- |
| `day` (string) | The ET trading day. |  |
| `t` (string \| null) | The minute judged. |  |
| `live` (boolean) | Whether the day is the live session. |  |
| `checks` (array) | One per position. |  |
| `checks[].position_id` (string) | The position. |  |
| `checks[].error` (string) | This position could not be checked right now. |  |
| `note` (string) | When the day has no market minute yet. |  |

## Errors

| Status | Code | What to do |
| --- | --- | --- |
| 401 | `no_key` | No key, or a revoked one. Send `Authorization: Bearer <key>` with a key of the product's scope. |
| 403 | `plan` | The account is not on the Orders API or Team plan. Move to the Orders API or Team plan. |
| 404 | `not_found` | No position with this id. Check the path or the id. |
| 429 | `rate` | The day's calls are spent. Wait for midnight ET, when the count resets. |

## Request

```sh
curl \
  -H "Authorization: Bearer $FIRMTAPE_ORDERS_KEY" \
  "https://firmtape.com/api/positions/check"
```

```python
import os, requests

H = {"Authorization": f"Bearer {os.environ['FIRMTAPE_ORDERS_KEY']}"}
r = requests.get("https://firmtape.com/api/positions/check", headers=H)
print(r.status_code, r.text[:500])
```

```js
const r = await fetch("https://firmtape.com/api/positions/check", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.FIRMTAPE_ORDERS_KEY}` },
});
console.log(r.status, await r.text());
```

## Example response

```json
{
  "error": {
    "code": "no_key",
    "message": "No key was sent (Orders: no key, or one that is unknown or revoked)."
  }
}
```

## Changes

- 2026-10-04: Added.
