Skip to content
Cirrus home
Sign in

Reference

Risk limits

Your overall daily loss limit and exposure cap for automated strategies.

Read the guide first

Your overall risk limits #

GET /v2/strategies/risk-limits scope read

Your limits across every automated strategy and account: the daily loss at which no new trades start (realised plus open, across strategies), the open exposure at which no new trades start, and whether a breached daily loss also closes open trades.

More about this

today is today's P&L of every automated strategy (no charges). Off unless OMS_AUTO_PORTFOLIO_RISK is on.

Errors

HTTPCodeWhen
401unauthorized

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

403forbidden

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

429rate_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).

503service_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://cirrus.pocketful.in/v2/strategies/risk-limits" \
  -H "Authorization: token $CIRRUS_API_KEY"
Response · 200
{
  "status": "success",
  "data": {
    "max_daily_loss": 15000,
    "max_open_exposure": null,
    "close_on_breach": true,
    "updated_at": "2026-10-22T15:22:21.171Z",
    "today": {
      "trading_day": "2026-10-22",
      "pnl": 0,
      "ltp_stale": false,
      "daily_loss_reached": false
    }
  },
  "error": null
}

Set your overall risk limits #

PUT /v2/strategies/risk-limits scope strategies

Sets your limits across every automated strategy.

More about this

Fields left out keep their value; null removes a limit. Amounts are rupees, positive, at most ₹100 crore. close_on_breach (off by default) also closes every open trade when the daily loss limit is reached, and needs max_daily_loss. The engine applies a change within about 30 seconds; while it can't read your limits, or today's P&L isn't known, new trades wait (open trades keep every exit). Needs the strategies_live scope. Takes an optional Idempotency-Key.

Body fields

  • max_daily_loss number (double) | null

    Today's loss across every strategy (₹, realised plus open) at which no new trades start. null removes it; left out keeps it.

  • max_open_exposure number (double) | null

    Open exposure across every strategy (₹) at which no new trades start: per trade, the most it can lose where that is bounded (spreads, bought options), else the broker's margin, else the entry value. null removes it; left out keeps it.

  • close_on_breach boolean | null

    Also close every open trade of your strategies when the daily loss limit is reached (off by default; needs max_daily_loss). Left out keeps it.

Errors

HTTPCodeWhen
401unauthorized

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

403forbidden

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

403live_not_enabled

Live deployments need the strategies_live scope and a broker open for live automated strategies.

422invalid_request

The request is well-formed but not valid; field names the input.

429rate_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).

503service_unavailable

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

All fields (request and response schema)

Loading fields…

PUT
curl -X PUT "https://cirrus.pocketful.in/v2/strategies/risk-limits" \
  -H "Authorization: token $CIRRUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "max_daily_loss": 15000,
    "max_open_exposure": 300000,
    "close_on_breach": true
  }'
Response · 200
{
  "status": "success",
  "data": {
    "max_daily_loss": 15000,
    "max_open_exposure": 300000,
    "close_on_breach": true,
    "updated_at": "2026-10-22T15:22:21.147Z"
  },
  "error": null
}