Skip to content
Cirrus home
Sign in

Accounts and profile

Your linked broker accounts and who the credential belongs to.

Read the guide first

List linked broker accounts #

GET /v1/accounts scope read

Every broker account the user linked, sorted by id, with whether it can trade now (status), what it lacks (missing) and how order updates arrive (updates).

More about this

Never a credential.

Errors

HTTP Code When
401 unauthorized

No credential, or the credential is invalid, expired or revoked.

403 forbidden

The credential may not use this route (missing scope, app-session-only route, IP not allowed).

429 rate_limited

Too many requests for this credential (or too many failed attempts); retry after the Retry-After header (seconds; error.retry_after_ms has the exact wait).

503 service_unavailable

A dependency is temporarily unavailable, or the feature is off on this server; retry later.

All fields (request and response schema)

Loading fields…

GET
curl "https://api.cirrus.trade/v1/accounts" \
  -H "Authorization: token $CIRRUS_API_KEY"
Response · 200
{
  "status": "success",
  "data": {
    "items": [
      {
        "account": "5P1",
        "broker": "5paisa",
        "broker_name": "5paisa",
        "tag": null,
        "multiplier": 1,
        "supported": true,
        "status": "login_required",
        "missing": [
          {
            "field": "static_ip",
            "label": "Static IP",
            "required": false
          }
        ],
        "updates": "stream",
        "static_ip": null,
        "last_login_at": null,
        "session_expires_at": null,
        "seat_assigned": null,
        "last_update_at": null,
        "protection": {
          "bracket": false,
          "cover": false,
          "gtt": false,
          "gtt_two_leg": false
        },
        "warnings": []
      },
      {
        "account": "MO1",
        "broker": "motilaloswal",
        "broker_name": "Motilal Oswal",
        "tag": null,
        "multiplier": 1,
        "supported": true,
        "status": "login_required",
        "missing": [
          {
            "field": "static_ip",
            "label": "Static IP",
            "required": false
          }
        ],
        "updates": "stream",
        "static_ip": null,
        "last_login_at": null,
        "session_expires_at": null,
        "seat_assigned": null,
        "last_update_at": null,
        "protection": {
          "bracket": false,
          "cover": false,
          "gtt": false,
          "gtt_two_leg": false
        },
        "warnings": []
      },
      {
        "account": "P1",
        "broker": "paper",
        "broker_name": "Paper",
        "tag": null,
        "multiplier": 1,
        "supported": true,
        "status": "ready",
        "missing": [],
        "updates": "postback",
        "static_ip": null,
        "last_login_at": null,
        "session_expires_at": null,
        "seat_assigned": null,
        "last_update_at": null,
        "protection": {
          "bracket": true,
          "cover": true,
          "gtt": true,
          "gtt_two_leg": true
        },
        "warnings": []
      },
      {
        "account": "P2",
        "broker": "paper",
        "broker_name": "Paper",
        "tag": null,
        "multiplier": 2,
        "supported": true,
        "status": "ready",
        "missing": [],
        "updates": "postback",
        "static_ip": null,
        "last_login_at": null,
        "session_expires_at": null,
        "seat_assigned": null,
        "last_update_at": null,
        "protection": {
          "bracket": true,
          "cover": true,
          "gtt": true,
          "gtt_two_leg": true
        },
        "warnings": []
      },
      {
        "account": "PF1",
        "broker": "pocketful",
        "broker_name": "Pocketful",
        "tag": null,
        "multiplier": 1,
        "supported": true,
        "status": "login_required",
        "missing": [],
        "updates": "stream",
        "static_ip": null,
        "last_login_at": null,
        "session_expires_at": null,
        "seat_assigned": null,
        "last_update_at": null,
        "protection": {
          "bracket": true,
          "cover": true,
          "gtt": true,
          "gtt_two_leg": false
        },
        "warnings": []
      },
      {
        "account": "TJ1",
        "broker": "tradejini",
        "broker_name": "Tradejini",
        "tag": null,
        "multiplier": 1,
        "supported": true,
        "status": "ready",
        "missing": [
          {
            "field": "static_ip",
            "label": "Static IP",
            "required": false
          }
        ],
        "updates": "stream",
        "static_ip": null,
        "last_login_at": null,
        "session_expires_at": "2026-10-12T11:31:53Z",
        "seat_assigned": null,
        "last_update_at": "2026-10-12T10:31:53.299825Z",
        "protection": {
          "bracket": true,
          "cover": true,
          "gtt": true,
          "gtt_two_leg": true
        },
        "warnings": []
      },
      {
        "account": "U1",
        "broker": "upstox",
        "broker_name": "Upstox",
        "tag": null,
        "multiplier": 1,
        "supported": true,
        "status": "login_required",
        "missing": [],
        "updates": "stream",
        "static_ip": null,
        "last_login_at": null,
        "session_expires_at": null,
        "seat_assigned": null,
        "last_update_at": null,
        "protection": {
          "bracket": false,
          "cover": false,
          "gtt": false,
          "gtt_two_leg": false
        },
        "warnings": []
      },
      {
        "account": "Z1",
        "broker": "zerodha",
        "broker_name": "Zerodha",
        "tag": null,
        "multiplier": 1,
        "supported": true,
        "status": "setup_incomplete",
        "missing": [
          {
            "field": "api_key",
            "label": "API Key",
            "required": true
          },
          {
            "field": "static_ip",
            "label": "Static IP",
            "required": false
          }
        ],
        "updates": "stream",
        "static_ip": null,
        "last_login_at": null,
        "session_expires_at": null,
        "seat_assigned": null,
        "last_update_at": null,
        "protection": {
          "bracket": false,
          "cover": false,
          "gtt": true,
          "gtt_two_leg": true
        },
        "warnings": []
      }
    ]
  },
  "error": null
}

One linked broker account #

GET /v1/accounts/{account} scope read

The account as in GET /v1/accounts, plus health: what its live worker last reported (order-update stream, polling, last book read, last broker error: its kind and last_error_message, safe to show the user).

Parameters

  • account path · string required

    Account id.

Errors

HTTP Code When
401 unauthorized

No credential, or the credential is invalid, expired or revoked.

403 forbidden

The credential may not use this route (missing scope, app-session-only route, IP not allowed).

404 account_not_found

No linked broker account with this id for the caller.

429 rate_limited

Too many requests for this credential (or too many failed attempts); retry after the Retry-After header (seconds; error.retry_after_ms has the exact wait).

503 service_unavailable

A dependency is temporarily unavailable, or the feature is off on this server; retry later.

All fields (request and response schema)

Loading fields…

GET
curl "https://api.cirrus.trade/v1/accounts/<account>" \
  -H "Authorization: token $CIRRUS_API_KEY"
Response · 200
{
  "status": "success",
  "data": {
    "account": "TJ1",
    "broker": "tradejini",
    "broker_name": "Tradejini",
    "tag": null,
    "multiplier": 1,
    "supported": true,
    "status": "ready",
    "missing": [
      {
        "field": "static_ip",
        "label": "Static IP",
        "required": false
      }
    ],
    "updates": "stream",
    "static_ip": null,
    "last_login_at": null,
    "session_expires_at": "2026-10-06T06:33:54Z",
    "seat_assigned": null,
    "last_update_at": "2026-10-06T05:33:54.471247Z",
    "protection": {
      "bracket": true,
      "cover": true,
      "gtt": true,
      "gtt_two_leg": true
    },
    "warnings": [],
    "health": {
      "stream": "up",
      "polls": false,
      "last_book_read_at": "2026-10-06T05:33:54.471247Z",
      "open_orders": 2,
      "last_error_kind": null,
      "last_error_message": null,
      "last_error_at": null
    }
  },
  "error": null
}

Who am I #

GET /v1/user/profile any credential

The user and the credential of this request (session, API key or partner app) with its scopes.

More about this

Any valid credential may call it, whatever its scopes. Never returns a secret.

Errors

HTTP Code When
401 unauthorized

No credential, or the credential is invalid, expired or revoked.

403 forbidden

The credential may not use this route (missing scope, app-session-only route, IP not allowed).

429 rate_limited

Too many requests for this credential (or too many failed attempts); retry after the Retry-After header (seconds; error.retry_after_ms has the exact wait).

503 service_unavailable

A dependency is temporarily unavailable, or the feature is off on this server; retry later.

All fields (request and response schema)

Loading fields…

GET
curl "https://api.cirrus.trade/v1/user/profile" \
  -H "Authorization: token $CIRRUS_API_KEY"
Response · 200
{
  "status": "success",
  "data": {
    "username": "user-01M65VA95T7KHB54A65SPDCDN8",
    "auth": {
      "kind": "api_key",
      "key_id": "ck_HER43mGjt79JtHSu5YT6",
      "name": "Reporting",
      "scopes": [
        "read"
      ],
      "ip_allowlist": [
        "203.0.113.7"
      ]
    }
  },
  "error": null
}