# Berg Balance Scale

BBS

Status: LIVE
Price: $0.005 USDC
`GET /api/calc/berg_balance`
HTML: https://magentlab.com/docs/berg-balance
Markdown: https://magentlab.com/docs/berg-balance.md

Not a medical device. Not a diagnosis, dose, or listing recommendation.

## What it computes

Sum fourteen caller-assigned Berg 1992 Berg Balance Scale items (each integer 0-4) and return the published 0-56 total. Does not apply later 0-20/21-40/41-56 website bands.

## When to use

When an agent already has Berg 1992 integers 0-4 for the fourteen Berg Balance Scale items and needs the published total. magent does not observe the patient, diagnose fall risk, score Timed Up and Go, or apply later 0-20 wheelchair / 21-40 walking-with-assistance / 41-56 independent website bands.

## When not to use

- Not a medical device and not a diagnosis of fall risk or a treatment order.
- Each of the fourteen items is a caller-assigned integer 0-4. magent does not observe the patient.
- This is Berg 1992 Berg Balance Scale only (fourteen items; max 56). magent does not score Timed Up and Go.
- Berg 1992 (PMID 1468055) published no 0-20 wheelchair / 21-40 walking-with-assistance / 41-56 independent website bands and no <45 fall-risk response field. This tool returns score and max_score only. It does not apply later website cutoffs.

## Formula

```
Berg Balance Scale = sitting_to_standing + standing_unsupported + sitting_unsupported + standing_to_sitting + transfers + standing_eyes_closed + standing_feet_together + reaching_forward + retrieving_object_from_floor + turning_to_look_behind + turning_360 + alternate_foot_on_stool + tandem_stance + standing_on_one_foot; each caller-assigned 0-4; Berg 1992 fourteen items; max 56; no 0-20 / 21-40 / 41-56 wheelchair/assist/independent website bands
```

## Citation

[Measuring balance in the elderly: validation of an instrument](https://pubmed.ncbi.nlm.nih.gov/1468055)
Berg KO, Wood-Dauphinee SL, Williams JI, Maki B
Can J Public Health. 1992;83 Suppl 2:S7-S11
DOI: none

## Worked example

### All items 0

Given: `alternate_foot_on_stool=0, reaching_forward=0, retrieving_object_from_floor=0, sitting_to_standing=0, sitting_unsupported=0, standing_eyes_closed=0, standing_feet_together=0, standing_on_one_foot=0, standing_to_sitting=0, standing_unsupported=0, tandem_stance=0, transfers=0, turning_360=0, turning_to_look_behind=0`

1. sitting_to_standing, standing_unsupported, sitting_unsupported, standing_to_sitting, transfers, standing_eyes_closed, standing_feet_together, reaching_forward, retrieving_object_from_floor, turning_to_look_behind, turning_360, alternate_foot_on_stool, tandem_stance, and standing_on_one_foot are 0 as assigned by the caller
2. Score = 0 (max 56). Berg 1992 published no 0-20/21-40/41-56 website band.


### All items 4

Given: `alternate_foot_on_stool=4, reaching_forward=4, retrieving_object_from_floor=4, sitting_to_standing=4, sitting_unsupported=4, standing_eyes_closed=4, standing_feet_together=4, standing_on_one_foot=4, standing_to_sitting=4, standing_unsupported=4, tandem_stance=4, transfers=4, turning_360=4, turning_to_look_behind=4`

1. each of the fourteen Berg 1992 Berg Balance Scale items is 4 as assigned by the caller
2. Score = 56 (max 56). No 0-20/21-40/41-56 website band.


## Also searched as

- Berg Balance Scale
- BBS
- Berg 1992 BBS
- Berg Balance Score
- fourteen-item Berg
- BBS 0-56
- functional balance Berg
- elderly Berg balance

## Parameters

- `sitting_to_standing` (integer, required): Caller-assigned Berg 1992 sitting to standing (integer 0-4): 4 able to stand without using hands and stabilize independently; 3 able to stand independently using hands; 2 able to stand using hands after several tries; 1 needs minimal aid to stand or stabilize; 0 needs moderate or maximal assist to stand. magent does not observe the patient.
- `standing_unsupported` (integer, required): Caller-assigned Berg 1992 standing unsupported (integer 0-4): 4 able to stand safely for 2 minutes; 3 able to stand 2 minutes with supervision; 2 able to stand 30 seconds unsupported; 1 needs several tries to stand 30 seconds unsupported; 0 unable to stand 30 seconds unassisted. magent does not observe the patient.
- `sitting_unsupported` (integer, required): Caller-assigned Berg 1992 sitting unsupported, feet supported (integer 0-4): 4 able to sit safely and securely for 2 minutes; 3 able to sit 2 minutes under supervision; 2 able to sit 30 seconds; 1 able to sit 10 seconds; 0 unable to sit without support 10 seconds. magent does not observe the patient.
- `standing_to_sitting` (integer, required): Caller-assigned Berg 1992 standing to sitting (integer 0-4): 4 sits safely with minimal use of hands; 3 controls descent by using hands; 2 uses back of legs against chair to control descent; 1 sits independently but has uncontrolled descent; 0 needs assistance to sit. magent does not observe the patient.
- `transfers` (integer, required): Caller-assigned Berg 1992 transfers (integer 0-4): 4 able to transfer safely with minor use of hands; 3 able to transfer safely definite need of hands; 2 able to transfer with verbal cuing and/or supervision; 1 needs one person to assist; 0 needs two people to assist or supervise to be safe. magent does not observe the patient.
- `standing_eyes_closed` (integer, required): Caller-assigned Berg 1992 standing unsupported with eyes closed (integer 0-4): 4 able to stand 10 seconds safely; 3 able to stand 10 seconds with supervision; 2 able to stand 3 seconds; 1 unable to keep eyes closed 3 seconds but stays standing; 0 needs help to keep from falling. magent does not observe the patient.
- `standing_feet_together` (integer, required): Caller-assigned Berg 1992 standing unsupported with feet together (integer 0-4): 4 able to place feet together independently and stand 1 minute safely; 3 able to place feet together independently and stand 1 minute with supervision; 2 able to place feet together independently but unable to hold 30 seconds; 1 needs help to attain position but able to stand 15 seconds; 0 needs help to attain position and unable to hold 15 seconds. magent does not observe the patient.
- `reaching_forward` (integer, required): Caller-assigned Berg 1992 reaching forward with outstretched arm while standing (integer 0-4): 4 can reach forward confidently more than 25 cm (10 inches); 3 can reach forward more than 12 cm (5 inches) safely; 2 can reach forward more than 5 cm (2 inches) safely; 1 reaches forward but needs supervision; 0 loses balance while trying or requires external support. magent does not observe the patient.
- `retrieving_object_from_floor` (integer, required): Caller-assigned Berg 1992 retrieving object from floor from a standing position (integer 0-4): 4 able to pick up slipper safely and easily; 3 able to pick up slipper but needs supervision; 2 unable to pick up but reaches 2-5 cm from slipper and keeps balance independently; 1 unable to pick up and needs supervision while trying; 0 unable to try or needs assist to keep from losing balance. magent does not observe the patient.
- `turning_to_look_behind` (integer, required): Caller-assigned Berg 1992 turning to look behind over left and right shoulders while standing (integer 0-4): 4 looks behind from both sides with weight shift; 3 looks behind one side only other side shows less weight shift; 2 turns sideways only but maintains balance; 1 needs supervision when turning; 0 needs assist to keep from losing balance or falling. magent does not observe the patient.
- `turning_360` (integer, required): Caller-assigned Berg 1992 turning 360 degrees (integer 0-4): 4 able to turn 360 degrees safely in 4 seconds or less; 3 able to turn 360 degrees safely one side only in 4 seconds or less; 2 able to turn 360 degrees safely but slowly; 1 needs close supervision or verbal cuing; 0 needs assistance while turning. magent does not observe the patient.
- `alternate_foot_on_stool` (integer, required): Caller-assigned Berg 1992 placing alternate foot on step or stool while standing unsupported (integer 0-4): 4 able to stand independently and safely and complete 8 steps in 20 seconds; 3 able to stand independently and complete 8 steps in more than 20 seconds; 2 able to complete 4 steps without aid with supervision; 1 able to complete more than 2 steps needs minimal assist; 0 needs assistance to keep from falling or unable to try. magent does not observe the patient.
- `tandem_stance` (integer, required): Caller-assigned Berg 1992 standing unsupported one foot in front (integer 0-4): 4 able to place foot tandem independently and hold 30 seconds; 3 able to place foot ahead of other independently and hold 30 seconds; 2 able to take small step independently and hold 30 seconds; 1 needs help to step but can hold 15 seconds; 0 loses balance while stepping or standing. magent does not observe the patient.
- `standing_on_one_foot` (integer, required): Caller-assigned Berg 1992 standing on one foot (integer 0-4): 4 able to lift leg independently and hold more than 10 seconds; 3 able to lift leg independently and hold 5-10 seconds; 2 able to lift leg independently and hold at least 3 seconds; 1 tries to lift leg unable to hold 3 seconds but remains standing independently; 0 unable to try or needs assist to prevent fall. magent does not observe the patient.

## Bulk (POST)

POST the same path with a JSON items array. The first item is the GET unit; each additional item is $0.002. Invalid items return HTTP 400 before settlement.

Method: `POST /api/calc/berg_balance`
Max items: 25
Price: unit_amount + extra_item_amount * (n - 1) (unit 5000 atomic, extra 2000 atomic)
Status: PREVIEW

- 1 to 25 items. Each item uses the same keys as the GET query parameters.
- POST of 1 item costs the same as GET. Lists longer than 25: chunk into multiple POSTs. Extra items still execute; do not pad dummy rows.
- The first invalid item fails the whole request (index in the 400 JSON). You are not charged.
- HTTP 200 is {count, path, items}. Each items[i] is the GET 200 body for that row.
- Catalog misses (empty matches, found=false) stay paid 200s inside that slot.
- x402 resource URL is this path plus n and body_sha256. Browsers that prefer text/html get the same paywall as GET; Pay retries POST with the same items.

Example request:

```json
{
  "items": [
    {
      "alternate_foot_on_stool": "0",
      "reaching_forward": "0",
      "retrieving_object_from_floor": "0",
      "sitting_to_standing": "0",
      "sitting_unsupported": "0",
      "standing_eyes_closed": "0",
      "standing_feet_together": "0",
      "standing_on_one_foot": "0",
      "standing_to_sitting": "0",
      "standing_unsupported": "0",
      "tandem_stance": "0",
      "transfers": "0",
      "turning_360": "0",
      "turning_to_look_behind": "0"
    },
    {
      "alternate_foot_on_stool": "0",
      "reaching_forward": "0",
      "retrieving_object_from_floor": "0",
      "sitting_to_standing": "0",
      "sitting_unsupported": "0",
      "standing_eyes_closed": "0",
      "standing_feet_together": "0",
      "standing_on_one_foot": "0",
      "standing_to_sitting": "0",
      "standing_unsupported": "0",
      "tandem_stance": "0",
      "transfers": "0",
      "turning_360": "0",
      "turning_to_look_behind": "0"
    }
  ]
}
```

Human paywall (two-item fixture): https://api.magentlab.com/paywall/bulk/berg-balance

Example 200:

```json
{
  "count": 2,
  "path": "/api/calc/berg_balance",
  "items": [
    {
      "components": [
        {
          "value": 0,
          "factor": "sitting_to_standing",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_unsupported",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "sitting_unsupported",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_to_sitting",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "transfers",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_eyes_closed",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_feet_together",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "reaching_forward",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "retrieving_object_from_floor",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "turning_to_look_behind",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "turning_360",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "alternate_foot_on_stool",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "tandem_stance",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_on_one_foot",
          "points": 0,
          "present": true
        }
      ],
      "disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
      "citation": {
        "authors": "Berg KO, Wood-Dauphinee SL, Williams JI, Maki B",
        "id": "berg-1992",
        "pmid": "1468055",
        "source": "Can J Public Health. 1992;83 Suppl 2:S7-S11",
        "title": "Measuring balance in the elderly: validation of an instrument"
      },
      "formula": "berg_balance",
      "formula_expression": "Berg Balance Scale = sitting_to_standing + standing_unsupported + sitting_unsupported + standing_to_sitting + transfers + standing_eyes_closed + standing_feet_together + reaching_forward + retrieving_object_from_floor + turning_to_look_behind + turning_360 + alternate_foot_on_stool + tandem_stance + standing_on_one_foot; each caller-assigned 0-4; Berg 1992 fourteen items; max 56; no 0-20 / 21-40 / 41-56 wheelchair/assist/independent website bands",
      "max_score": 56,
      "score": 0
    },
    {
      "components": [
        {
          "value": 0,
          "factor": "sitting_to_standing",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_unsupported",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "sitting_unsupported",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_to_sitting",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "transfers",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_eyes_closed",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_feet_together",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "reaching_forward",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "retrieving_object_from_floor",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "turning_to_look_behind",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "turning_360",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "alternate_foot_on_stool",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "tandem_stance",
          "points": 0,
          "present": true
        },
        {
          "value": 0,
          "factor": "standing_on_one_foot",
          "points": 0,
          "present": true
        }
      ],
      "disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
      "citation": {
        "authors": "Berg KO, Wood-Dauphinee SL, Williams JI, Maki B",
        "id": "berg-1992",
        "pmid": "1468055",
        "source": "Can J Public Health. 1992;83 Suppl 2:S7-S11",
        "title": "Measuring balance in the elderly: validation of an instrument"
      },
      "formula": "berg_balance",
      "formula_expression": "Berg Balance Scale = sitting_to_standing + standing_unsupported + sitting_unsupported + standing_to_sitting + transfers + standing_eyes_closed + standing_feet_together + reaching_forward + retrieving_object_from_floor + turning_to_look_behind + turning_360 + alternate_foot_on_stool + tandem_stance + standing_on_one_foot; each caller-assigned 0-4; Berg 1992 fourteen items; max 56; no 0-20 / 21-40 / 41-56 wheelchair/assist/independent website bands",
      "max_score": 56,
      "score": 0
    }
  ]
}
```

## Response fields

- `formula` (string): berg_balance
- `formula_expression` (string): Exact expression used
- `score` (integer): Berg 1992 sum of fourteen caller-assigned 0-4 items (total 0-56)
- `max_score` (integer): Always 56
- `components` (array): Per-item caller-assigned points
- `citation` (object): Berg Can J Public Health 1992 citation
- `disclaimer` (string): Not-a-device notice

## Example JSON

Frozen fixture. Not a live lookup.

```json
{
  "components": [
    {
      "value": 0,
      "factor": "sitting_to_standing",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "standing_unsupported",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "sitting_unsupported",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "standing_to_sitting",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "transfers",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "standing_eyes_closed",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "standing_feet_together",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "reaching_forward",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "retrieving_object_from_floor",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "turning_to_look_behind",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "turning_360",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "alternate_foot_on_stool",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "tandem_stance",
      "points": 0,
      "present": true
    },
    {
      "value": 0,
      "factor": "standing_on_one_foot",
      "points": 0,
      "present": true
    }
  ],
  "disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
  "citation": {
    "authors": "Berg KO, Wood-Dauphinee SL, Williams JI, Maki B",
    "id": "berg-1992",
    "pmid": "1468055",
    "source": "Can J Public Health. 1992;83 Suppl 2:S7-S11",
    "title": "Measuring balance in the elderly: validation of an instrument"
  },
  "formula": "berg_balance",
  "formula_expression": "Berg Balance Scale = sitting_to_standing + standing_unsupported + sitting_unsupported + standing_to_sitting + transfers + standing_eyes_closed + standing_feet_together + reaching_forward + retrieving_object_from_floor + turning_to_look_behind + turning_360 + alternate_foot_on_stool + tandem_stance + standing_on_one_foot; each caller-assigned 0-4; Berg 1992 fourteen items; max 56; no 0-20 / 21-40 / 41-56 wheelchair/assist/independent website bands",
  "max_score": 56,
  "score": 0
}
```

## Errors

- HTTP 400 `invalid_berg_balance`: Berg Balance Scale needs the fourteen Berg 1992 items each as an integer 0-4. Returned before settlement; you are not charged.
- HTTP 400 `invalid_berg_balance_item`: each Berg Balance Scale item must be an integer from 0 to 4 (Berg 1992). Returned before settlement; you are not charged.
- HTTP 400 `invalid_items`: POST body must be a JSON object with only an items array Returned before settlement; you are not charged.
- HTTP 400 `invalid_item_count`: items must be an array of 1 to 25 objects Returned before settlement; you are not charged.
- HTTP 400 `invalid_item`: each items entry must be a JSON object Returned before settlement; you are not charged.

Shared HTTP 402 and 503: https://magentlab.com/docs/payments

## Related tools

- [Barthel Index](https://magentlab.com/docs/barthel) — Sum ten caller-assigned Mahoney 1965 Barthel Index item points and return the published 0-100 total.
- [NDI](https://magentlab.com/docs/ndi) — Sum ten caller-assigned Vernon 1991 Neck Disability Index sections (each integer 0-5) and return the published 0-50 total with that paper's raw-score disability bands.

## Payment

Unpaid requests return HTTP 402 even if query parameters or POST items are missing or invalid, so CDP and agents can index the path. After a PAYMENT-SIGNATURE, invalid params return HTTP 400 JSON before settlement. magent does not charge. Fix the params, then request a new 402 quote for that complete URL. Catalog misses (empty matches, found=false) are valid paid 200s.

- GET the tool with Accept: application/json (do not send Accept: text/html unless you want the human paywall).
- HTTP 402 means you have not paid. Decode the base64 PAYMENT-REQUIRED header. HTTP 503 is not a new quote.
- Sign accepts[0] (exact, EIP-3009) with validBefore = now + maxTimeoutSeconds (600 seconds), or accepts[1] (batch-settlement deposit/voucher) on product GET. Ping and POST {items} stay exact. Magent retries transient facilitator 429/5xx before answering.
- Retry the same URL with PAYMENT-SIGNATURE (base64 JSON of accepted and payload). Magent attaches canonical extensions.bazaar on CDP verify/settle; echoing 402 bazaar is optional.
- Success is HTTP 200 JSON plus PAYMENT-RESPONSE. exact settles before the tool. batch-settlement verifies (and deposit-settles) before the tool and commits the charge after HTTP 2xx. HTTP 503: retry the same PAYMENT-SIGNATURE. Mint a new exact nonce only after a new HTTP 402.

- offered `exact` on eip155:8453: Fixed-price USDC on Base. The buyer authorizes the advertised amount (EIP-3009). magent settles before the tool runs (paymentFlow upfront). extra.assetTransferMethod=eip3009 extra.paymentFlow=upfront.
- offered `batch-settlement` on eip155:8453: Payment-channel vouchers claimed later in batches. Exact stays accepts[0]. Same-path POST {items} is still exact. extra.assetTransferMethod=eip3009 extra.paymentFlow=authorization.

- not offered `upto`: Not offered. Usage-based: buyer authorizes a ceiling, seller settles the actual amount after work. Reserved for a future metered tool. Not for current calculators or code search.

Same-path POST {items} is still scheme exact: one EIP-3009 authorization for GET unit plus $0.002 per extra item. That is not x402 batch-settlement (payment channels / vouchers).

Shared HTTP 402 and 503 table: https://magentlab.com/docs/payments

Stdio MCP (one process per host): https://magentlab.com/docs/mcp

## Guarantees

- HTTP 402 is unpaid, including a missing query. After PAYMENT-SIGNATURE, invalid parameters return HTTP 400 before settlement. You are not charged. HTTP 402 never includes the tool JSON.
- exact: settlement finishes before the tool (paymentFlow upfront). batch-settlement: verify/deposit before the tool; chargedCumulativeAmount commits after HTTP 2xx. Uncertain or failed settlement fails closed (HTTP 503). Retry the same PAYMENT-SIGNATURE.
- HTTP 402 is unpaid only. Do not sign a second authorization because of a 503.
- Execution is timeout-bounded and concurrency-capped.
- Calculator inputs are stored encrypted for allowlisted operators (Magent Console). They are not in public logs, SSH lookups, catalog, or rollups. Request logs store path without query.
