# Timeline (SVG)

`POST https://api.astroway.info/v1/render/timeline`

Gantt-style horizontal timeline of transit/aspect events over a date window. Caller supplies events array.

Group: Visualization. Auth: `X-Api-Key` header. Operation ID: `render_timeline`.

## 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 |
|---|---|---|---|
| `rangeStart` | string | yes |  |
| `rangeEnd` | string | yes |  |
| `events` | object[] | yes |  |
| `options` | object | no |  |
| `options.size` | integer | no |  |
| `options.theme` | "light" \| "dark" \| "console" \| "css" | no | css paints every colour as var(--aw-<role>, <light colour>), so the page that inlines the SVG can recolour it with CSS custom properties (--aw-chart-bg, --aw-fg, --aw-muted, --aw-ring, --aw-houses-fill, --aw-benefic, --aw-malefic, --aw-aspect-harmonious, --aw-aspect-tense, --aw-aspect-neutral, --aw-aspect-minor, --aw-aspect-quintile, --aw-moon-shadow, --aw-moon-light, --aw-cycle-physical, --aw-cycle-emotional, --aw-cycle-intellectual). With none set it looks exactly like light. Inside an <img> the variables cannot be set, so it stays light. The Western wheels and the aspect grid then also carry stable aw-* classes, and each planet is a <g> with data-planet and data-label, each aspect line has data-a and data-b; see the @astroway/render changelog for the list. |
| `options.showAspects` | boolean | no |  |
| `options.showRetrograde` | boolean | no |  |
| `options.title` | string | no |  |
| `options.format` | "svg" \| "json" | no |  |
| `options.width` | integer | no |  |
| `options.rowHeight` | integer | no |  |

```json
{
  "rangeStart": "2026-01-01",
  "rangeEnd": "2026-12-31",
  "events": [
    {
      "label": "Saturn ☐ Sun",
      "start": "2026-03-15",
      "end": "2026-04-20",
      "exact": "2026-04-02",
      "category": "Square"
    }
  ],
  "options": {
    "theme": "light",
    "width": 1000
  }
}
```

## Responses

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

### Success fields, under `data`

| Field | Type | Required | Description |
|---|---|---|---|
| `svg` | string | no |  |
| `format` | string | no |  |
| `byteLength` | number | no |  |

## Example

```bash
curl -X POST https://api.astroway.info/v1/render/timeline \
  -H "X-Api-Key: aw_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "rangeStart": "2026-01-01", "rangeEnd": "2026-12-31", "events": [ { "label": "Saturn ☐ Sun", "start": "2026-03-15", "end": "2026-04-20", "exact": "2026-04-02", "category": "Square" } ], "options": { "theme": "light", "width": 1000 } }'
```

---

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