Support

Most answers are
already written.

Search first — it is faster than waiting on us. If nothing fits, open a ticket and it lands in a thread you can follow, not an inbox you can't see.

All systems normal — status Typical first reply under 12 hours 29 answers, updated as questions come in

Answers

Browse by area.

Every answer here came from a real question. When one keeps getting asked, it ends up on this page.

29 answers
Getting startedHow do I get an API key?
Sign in with Google on your dashboard and create a key. Free keys start gapi_test_, live keys start gapi_live_. The full key is shown once and never again — we store a SHA-256 hash, not the key.
Getting startedWhat does my first request look like?
A plain HTTPS GET with the key in a header:
curl "https://api.greyhoundapi.com/v1/racecards/today?region=GB" -H "X-API-Key: $GAPI_KEY"
No OAuth, no request signing.
Getting startedIs there a free tier?
Yes, and it doesn't expire. A free key reaches 7 endpoints across every GB and AU track, over a rolling window from 24 hours to 7 days old, at 60 requests a minute and 500 a day. No card required.
Getting startedDo you have SDKs?
Official wrappers for Python, JavaScript, PHP and Go, plus an OpenAPI 3.1 spec and a Postman collection generated from the same registry as the docs.
Keys & authI lost my API key — can you resend it?
No, and that's deliberate: we only store a SHA-256 hash, so nobody at our end can read your key either. Create a new one from your dashboard and revoke the old one.
Keys & authHow do I rotate a key without downtime?
Press Rotate on the key row. You get the new key immediately and the old one keeps working for 24 more hours, so you can deploy the replacement without a gap.
Keys & authI'm getting 401 unauthorized
The key is missing, mistyped, or revoked. Check the header is exactly X-API-Key, and that your shell variable is actually set — an unset $GAPI_KEY sends an empty header and looks identical to a bad key.
Keys & authWhat does key_suspended mean?
The key is intact but the account behind it is suspended — usually a failed payment. Settle billing on your dashboard and the key resumes without needing to be recreated.
LimitsWhat are the rate limits?
Free: 60 a minute, 500 a day. Live: 120 a minute, 250,000 a month. Live Plus: 180 a minute, 600,000 a month. Every response carries X-RateLimit-* headers so you can back off before you hit them.
LimitsI'm getting 429 rate_limited
You've exceeded the per-minute rate. The response includes Retry-After in seconds — wait that long rather than retrying immediately. If it's constant, you're likely polling where a WebSocket or webhook would do.
LimitsWhat is quota_exceeded?
Different from 429 — you've used your monthly or daily allowance rather than the per-minute rate. It resets at the start of the next period. Usage per key is on your dashboard.
LimitsDo streamed events count against my quota?
No. A request is one successful API call. Events delivered over the WebSocket stream or by webhook don't consume quota.
DataHow fresh is the data?
Results typically land about 8 minutes after a race finishes. Every response carries meta.data_as_of — the last successful pipeline run — so you can tell how current the answer is rather than guessing.
DataWhy is my request returning an empty list?
Usually the date window. On a free key nothing inside the last 24 hours exists, and nothing older than 7 days. Check the region too — region=GB excludes Australian racing entirely.
DataWhat does outside_sandbox_window mean?
A free key asked for racing outside its 24-hour to 7-day window — usually today's card. Live-day data and the full archive need a live key.
DataHow do you handle timezones between GB and AU?
Every timestamp is UTC, and race times also carry a track-local value. Date filters are resolved in the track's own timezone, so "races on the 14th" means the 14th where the race ran. See Timezones & dates.
DataHow far back does the archive go?
Over three years of GB and AU racing, with results, starting prices and sectionals where published. The free key sees a rolling 7-day window; live keys reach the whole archive.
DataDo you sell predictions or tips?
No. It's race data — results, form, times and prices. What you build on top is yours.
DeliveryWhen should I use webhooks instead of polling?
Whenever you care about results landing promptly. Polling burns quota and still lags; a webhook fires the moment a result is logged. Up to 10 endpoints, signed with HMAC-SHA256 in X-GAPI-Signature.
DeliveryHow do I verify a webhook signature?
X-GAPI-Signature equals 'sha256=' . HMAC-SHA256(raw request body, your signing secret). Hash the raw body before any JSON parsing, and compare with a timing-safe function.
DeliveryMy webhook stopped receiving events
Check the Webhooks tab on your dashboard — failed deliveries show the HTTP status your endpoint returned. We retry with backoff for 24 hours, then stop. A paused endpoint is skipped, not queued.
DeliveryHow many WebSocket connections can I open?
Two concurrent connections on a live plan. The stream carries results and race status changes; channels and replay are covered in the WebSocket guide.
BillingHow do I cancel?
From your dashboard, any time. Access continues to the end of the period you've already paid for. Nothing is charged after that.
BillingDo you offer refunds?
Fees are non-refundable and partial periods aren't pro-rated, except where the law requires otherwise. If something has genuinely gone wrong, use the refund review form — that's the only channel for it.
BillingWhat's the difference between Live and Live Plus?
Live reaches 35 endpoints with live-day data and the full archive. Live Plus adds the three statistics endpoints — dog, trainer and owner splits by distance, trap, track, grade and going — plus more headroom at 180 a minute and 600,000 a month.
BillingCan I switch plans mid-month?
Yes. Upgrades take effect immediately and Stripe prorates the difference. Your existing keys gain the new endpoints without being recreated.
AccountI can't sign in with Google
Open a ticket using the "I can't sign in" category — that route doesn't require an account, and we'll verify by email instead.
AccountCan I have more than one key?
Yes — up to five live keys and one free key per account. Separate keys per environment make revoking one safe.
AccountIs there a status page?
Yes — status.greyhoundapi.com shows pipeline, stream and REST health with 30-day uptime, and /status.json is machine-readable if you want to alert on it.
No answer for that yet

That's useful to know — the search is logged, so it goes on the list to write. In the meantime, open a ticket and we'll answer it directly.

Open a ticket about this

Still stuck

Open a ticket.

It becomes a thread you can follow — you'll see every reply on this site, and get an email when one lands. No shared inbox, nothing lost in a spam folder.

Tell us what's happening

Draft it now. You'll sign in at the end — nothing you type here is lost.

Signing in is required to submit — it ties the ticket to your account and keys.

Only needed because you're not signed in.

These might answer it right now

One step left. Sign in with Google to submit — it links the ticket to your account so we can see your keys and plan without asking. Your draft is kept.

New here? Signing in creates your account — same one you'd use for a free API key. Picked “I can't sign in”? That route submits by email instead.