# PATCH /v2/universes/{id}

**Update a universe**

Update `name`, `description`, or `tickers`. To add/remove ticker subsets without replacing the full list, pass `{ add: [...], remove: [...] }` instead of `tickers`.

## Plan access

- **Plan access.** Included on every plan.
- **Rate limit.** Hobby 60/min · Pro 2,000/min · Scale 10,000/min.
- **Capacity.** Hobby 5 · Pro 25 · Scale 100 · Enterprise unlimited.

## Body parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `id` | path | string | yes | Universe slug. |
| `name` | body | string | no | New label. |
| `description` | body | string | no | New notes. |
| `tickers` | body | string[] | no | Replace the full ticker list. |
| `add` | body | string[] | no | Add these tickers (deduplicated). |
| `remove` | body | string[] | no | Remove these tickers. |

## Status codes

- **200** — Updated universe doc.
- **403** — Cannot edit a system universe.
- **404** — `not_found`.

## Sample response

```json
{
  "as_of": "2026-05-14T11:41:01.000Z",
  "id": "my_watchlist",
  "name": "My Watchlist",
  "description": "Stocks I'm tracking",
  "tickers": ["AAPL", "NVDA", "TSLA", "AMD", "GOOGL"],
  "size": 5,
  "system": false,
  "created_at": 1778720416,
  "updated_at": 1778750000
}
```

## Examples

### Add tickers without replacing the list

Request:

```shell
curl -X PATCH https://api.tickerbot.io/v2/universes/my_watchlist \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"add":["AMD","GOOGL"]}'
```

Response (`200`):

```json
{
  "as_of": "2026-05-14T11:41:01.000Z",
  "id": "my_watchlist",
  "name": "My Watchlist",
  "description": "Stocks I'm tracking",
  "tickers": ["AAPL", "NVDA", "TSLA", "AMD", "GOOGL"],
  "size": 5,
  "system": false,
  "created_at": 1778720416,
  "updated_at": 1778750000
}
```

---

Interactive sandbox + parameter editor: https://tickerbot.io/api/endpoints/universes/update
