# 5-Element Balance

`POST https://api.astroway.info/v1/bazi/element-balance`

Element balance across the whole chart. The `balance` object opens the branches and counts all eight characters three ways: visible, with every hidden stem, and weighted so the total stays at eight. The top-level elementCounts, dominantElement and missingElements are DEPRECATED (year and month only, four characters, branches unopened) and keep answering unchanged until 2027-09-08; the response carries RFC 8594 Deprecation and Sunset headers.

Group: BaZi (Four Pillars). Auth: `X-Api-Key` header. Operation ID: `bazi_element-balance`.

## Parameters

| Name | In | Required | Type | Description |
|---|---|---|---|---|
| `fields` | query | no | string | Comma-separated dotted paths, relative to `data`, to keep in the response. A path is applied to every element of an array, so `planets.name` means the name of each planet. Paths that match nothing come back in `_fields_unmatched`; a list where nothing matches at all is a 400, because an empty object would be a confident wrong answer. |
| `precision` | query | no | integer | Round every non-integer number in the response to this many decimal places. Integers are left alone, because an id is not a measurement. Ecliptic longitudes ship with fourteen decimals by default; 2 is about a tenth of an arcminute. |

## Request body

| Field | Type | Required | Description |
|---|---|---|---|
| `date` | string | yes |  |
| `time` | string | no |  |
| `timezoneOffset` | number | no | Ignored when timezone is sent. |
| `timezone` | string | no | IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known. |
| `longitude` | number | no |  |
| `trueSolarTime` | boolean | no |  |
| `stageSchool` | "classical" \| "unified" | no |  |
| `includeFullTable` | boolean | no |  |
| `language` | string | no |  |

```json
{
  "date": "1990-05-15",
  "time": "14:30:00",
  "timezoneOffset": 8
}
```

## Responses

| Status | Meaning |
|---|---|
| 200 | Successful calculation |
| 400 | Validation error |
| 401 | Missing or invalid API key |

### Success fields, under `data`

| Field | Type | Required | Description |
|---|---|---|---|
| `solarYear` | number | no |  |
| `pillars` | object[] | no |  |
| `elementCounts` | object | no |  |
| `elementCounts.Wood` | number | no |  |
| `elementCounts.Fire` | number | no |  |
| `elementCounts.Earth` | number | no |  |
| `elementCounts.Metal` | number | no |  |
| `elementCounts.Water` | number | no |  |
| `dominantElement` | string | no |  |
| `missingElements` | string[] | no |  |
| `balance` | object | no |  |
| `balance.scope` | string | no |  |
| `balance.visible` | object | no |  |
| `balance.withHiddenStems` | object | no |  |
| `balance.weighted` | object | no |  |
| `balance.weighting` | string | no |  |
| `balance.dominantElement` | string | no |  |
| `balance.dominantElementName` | string | no |  |
| `balance.missingElements` | object[] | no |  |
| `balance.missingElementNames` | object[] | no |  |
| `balance.hiddenStems` | object[] | no |  |
| `deprecations` | object[] | no |  |
| `notes` | object[] | no |  |
| `methodology` | string | no |  |
| `source` | string | no |  |
| `disclaimer` | string | no |  |

## Example

```bash
curl -X POST https://api.astroway.info/v1/bazi/element-balance \
  -H "X-Api-Key: aw_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "date": "1990-05-15", "time": "14:30:00", "timezoneOffset": 8 }'
```

---

Rendered from https://api.astroway.info/v1/openapi.json. HTML page: https://api.astroway.info/docs/api/operations/bazi_element-balance/
