tastytradeDeveloper Docs
Legacy ↗

Manage watchlists

A watchlist is a named collection of instruments you want to track. This guide walks through managing your own (user) watchlists: listing them, creating one, fetching it by name, replacing it, and deleting it. tastytrade also publishes read-only public watchlists and pairs watchlists that any client can fetch.

All requests go to the sandbox base URL https://api.cert.tastyworks.com or production https://api.tastyworks.com. Every request must send a valid OAuth access token (Authorization: Bearer <token>, minted via POST /oauth/token, 15-minute expiry) and a User-Agent: product/version header (see Get started). JSON keys are dasherized (for example watchlist-entries, instrument-type, order-index).

1. List your watchlists

GET /watchlists returns every watchlist for the authenticated user.

curl https://api.cert.tastyworks.com/watchlists \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "User-Agent: my-app/1.0.0"

2. Create a watchlist

POST /watchlists creates a watchlist. The request body requires name and watchlist-entries. Each entry requires a symbol; instrument-type is optional but recommended so the symbol resolves unambiguously. See Instruments and symbology for valid symbol formats and instrument types. You may also set an optional group-name and order-index (defaults to 9999).

{
  "name": "Tech Megacaps",
  "group-name": "Sectors",
  "order-index": 10,
  "watchlist-entries": [
    { "symbol": "AAPL", "instrument-type": "Equity" },
    { "symbol": "MSFT", "instrument-type": "Equity" }
  ]
}
curl -X POST https://api.cert.tastyworks.com/watchlists \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "User-Agent: my-app/1.0.0" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Tech Megacaps",
    "watchlist-entries": [
      { "symbol": "AAPL", "instrument-type": "Equity" },
      { "symbol": "MSFT", "instrument-type": "Equity" }
    ]
  }'

A successful create returns 201 Created with the stored watchlist. Creating is not idempotent, so retrying after a network error may produce a duplicate — confirm with a list call before retrying. See Idempotency and retries.

3. Get a watchlist by name

GET /watchlists/{watchlist_name} returns a single watchlist. URL-encode the name if it contains spaces (for example Tech%20Megacaps).

curl "https://api.cert.tastyworks.com/watchlists/Tech%20Megacaps" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "User-Agent: my-app/1.0.0"

4. Update (replace) a watchlist

PUT /watchlists/{watchlist_name} replaces all properties of the watchlist. This is a full replacement, not a merge: send the complete watchlist-entries array you want to keep — entries omitted from the body are removed. The body uses the same shape as create and requires name and watchlist-entries.

curl -X PUT "https://api.cert.tastyworks.com/watchlists/Tech%20Megacaps" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "User-Agent: my-app/1.0.0" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Tech Megacaps",
    "watchlist-entries": [
      { "symbol": "AAPL", "instrument-type": "Equity" },
      { "symbol": "MSFT", "instrument-type": "Equity" },
      { "symbol": "NVDA", "instrument-type": "Equity" }
    ]
  }'

To rename a watchlist, set a new name in the body. PUT returns 200 OK with the updated watchlist.

5. Delete a watchlist

DELETE /watchlists/{watchlist_name} removes the watchlist and returns 200 OK with the deleted watchlist.

curl -X DELETE "https://api.cert.tastyworks.com/watchlists/Tech%20Megacaps" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "User-Agent: my-app/1.0.0"

Public and pairs watchlists (read-only)

These endpoints are shared by tastytrade and cannot be modified:

OperationEndpoint
List public watchlistsGET /public-watchlists
Get one public watchlistGET /public-watchlists/{watchlist_name}
List pairs watchlistsGET /pairs-watchlists
Get one pairs watchlistGET /pairs-watchlists/{pairs_watchlist_name}

GET /public-watchlists accepts an optional counts-only query parameter (boolean, default false) to return entry counts instead of full entries.

Error handling

Watchlist endpoints use standard HTTP status codes — 422 for malformed or invalid bodies, 401/403 for auth problems, 404 for an unknown watchlist name, and 429 when you are rate limited (see Rate limits and backoff). See Error reference for the response shape.

Reference