Skip to content

Getting started

This guide takes you from no key to live market data in a few minutes. Every code sample on this site is a file in the repository’s site/samples/ directory, and each one runs against a real API on every change, so what you copy works.

  • An organization on the Pro plan or higher. Core and Free organizations can’t create keys. See entitlements by plan.
  • The owner or admin role in that organization, to create keys.
  • For the shell samples: curl and jq.
  1. In the app, open Settings → Developers and choose Create key.
  2. Name the key after the integration that will use it (for example pricing-bot), and pick its scopes. Read only covers the catalog, market data, sales and maps. Add stream for the realtime stream (each topic also needs its read scope, and the alerts topic alerts:write); the write scopes are for lists, alert rules and webhooks. See scopes.
  3. Optionally restrict the key to your servers’ IP addresses and give it an expiry.
  4. Copy the key. It is shown once: Status302 only keeps a hash of it.

Keep the key out of your code. The samples read it from the environment:

Terminal window
export STATUS302_API_KEY="tx_live_…"
export STATUS302_API_URL="https://api.status302.com" # the default; point it at another environment if you have one

List the next five upcoming events. The key goes in the Authorization header as a Bearer token.

samples/curl/first-request.sh
#!/usr/bin/env bash
# The next five upcoming events in the catalog.
set -euo pipefail
API="${STATUS302_API_URL:-https://api.status302.com}"
curl --fail-with-body -sS "$API/v1/events?limit=5" \
-H "Authorization: Bearer $STATUS302_API_KEY"

The answer is a page of events, soonest first (abridged):

{
"items": [
{
"id": 4102,
"name": "J. Cole: The Fall-Off Tour",
"startsAt": "2026-10-28T18:30:00Z",
"status": "onsale",
"venue": { "id": 77, "name": "Co-op Live", "city": "Manchester", "stateCode": null, "countryCode": "GB" },
"metrics": { "scope": "primary", "currency": "GBP", "floor": 4420, "median": 7275, "inventory": 1372, "sales24h": 123 }
}
],
"nextCursor": "eyJzIjoic3RhcnRzQXQiLCJ2IjoiMjAyNi0xMC0yOFQxODozMDowMFoiLCJpIjo0MTAyfQ"
}

Prices are integers in the currency’s minor unit: 4420 GBP is £44.20. See money and currency.

GET /v1/events/{id}/metrics returns one row per market (primary for Ticketmaster face value, tm_resale for verified resale) with the floor, median, inventory, sales and their changes over 24 hours, 72 hours and 7 days.

samples/curl/event-metrics.sh
#!/usr/bin/env bash
# Market metrics (floor, median, inventory, sales, changes) of the next upcoming event.
set -euo pipefail
API="${STATUS302_API_URL:-https://api.status302.com}"
AUTH="Authorization: Bearer $STATUS302_API_KEY"
event_id=$(curl --fail-with-body -sS "$API/v1/events?limit=1" -H "$AUTH" | jq -r '.items[0].id')
curl --fail-with-body -sS "$API/v1/events/$event_id/metrics" -H "$AUTH" \
| jq '.items[] | {scope, currency, floor, median, inventory, sales24h, chg24h, asOf}'

The SDKs are typed from the same OpenAPI spec as the API reference. They follow cursors for you, retry rate-limited requests after Retry-After, raise typed errors, verify webhooks and include a stream client that reconnects and resumes on its own.

Terminal window
npm install @status302/sdk # TypeScript / JavaScript, Node.js 22+
pip install status302 # Python 3.11+

See the TypeScript and Python guides.

  • Authentication: scopes, IP allowlists, rotation without downtime.
  • Rate limits: read the RateLimit headers and handle 429.
  • Realtime stream: live sales, inventory changes and alert firings over one WebSocket.
  • Webhooks: get alert firings and on-sale announcements pushed to your server.