APIHorseRacing

Support

Ask here, not by email.

Everything runs through a ticket with a thread, so nothing gets lost in somebody's inbox and you can always see where a question got to. Most answers are already below.

How do I get an API key?

Sign in with Google and one is issued immediately, on the free plan. There is no card and no trial clock. The key appears on your account page and stays visible there, so you never have to store it somewhere else in a hurry.

My key stopped working. What happened?

Almost always one of three things. It was rotated from your account page, in which case the old one stopped the moment the new one appeared. Or the header is wrong: it must be X-API-Key. Or you are getting a 403 rather than a 401, which is a plan refusal and not an authentication problem at all.

Do I need a new key when I upgrade?

No. There is one key per account and its entitlement is read on every request, so an upgrade widens what the key you already hold can reach, the same day, with nothing to reissue.

Can I have more than one key?

Not at the moment. One account, one key, which is what makes an upgrade take effect without a reissue. If you need to separate environments, tell us what you are doing and we will say honestly whether it is on the roadmap.

Why is this field null?

Nine times out of ten because the jurisdiction never published it. Data coverage shows which fields exist in which country, counted from the archive rather than declared. Official ratings are on about three quarters of British runners and a few percent of French ones, and no provider has what was not released.

Why do most American runners have no finishing position?

America publishes the placings and nothing below them, so runners outside the first four come back with position: null. It is not a gap in our data. If your work counts beaten runners, American racing cannot support it.

Do you have sectional times?

No, and we never will. They do not exist in this dataset at any point in its history, in any jurisdiction. If your model needs in-running fractions this is the wrong feed, and no plan changes that.

Do you have bookmaker odds comparison?

No. Starting price, an opening price where one was published, and the tote. We are not a price aggregator and will not become one. Price movement exists on British and Irish runners and essentially nowhere else.

How fresh is the data?

Every response carries data_as_of, which is when the serving database was last written. Results land within minutes in Britain and Ireland and can take longer elsewhere, because the delay is the jurisdiction publishing rather than us fetching.

A race is missing. Is something broken?

Check /v1/meta/coverage first. It returns the newest date held, which tells you the difference between a date we do not have and a date with no racing on it. An empty array is an answer; a 403 is a plan refusal.

Can I cache your data?

Yes, and you should. A settled race never changes, so store it and never re-fetch it. Courses and reference values effectively never change either. Only today's card needs re-fetching, and then only every few minutes.

How do I cancel?

From your account page, in two clicks, with no email and no phone call. Your plan runs to the end of the period you have paid for and does not renew.

Can I get a refund?

If the data cannot do what you subscribed for, tell us within fourteen days and we refund it in full. You do not need to justify it beyond saying what you needed and what was missing. The refunds page is short on purpose.

Is anything sold as an add-on?

No. Every jurisdiction and every field is on every paid plan. There is no per-country pricing and no premium region.

I keep getting 429s.

Two different things return a 429. rate_limited means too fast this minute, and Retry-After tells you how long to wait. quota_exceeded means your monthly allowance is gone and retrying achieves nothing until it resets. Branch on the code, not the status.

How do I stop polling for results?

Subscribe to the result.received webhook. Deliveries arrive as soon as a race settles and cost nothing against your quota. A process polling every thirty seconds is about ninety thousand requests a month and still finds out later.

Why does the console say my request failed?

Usually the key field is empty or the path still has a placeholder in it. The console runs from your browser straight to the API, so a browser extension blocking the request will also do it. The output panel names which.

Are the identifiers stable?

Yes. An identifier for a given thing never changes, so store them and use them as foreign keys. They are opaque on purpose and carry a prefix, which is why passing a horse id where a race is expected returns invalid_id rather than the wrong race.

Open a ticket

Answered by whoever wrote the endpoint, not a queue. Say what you called, what came back and what you expected.

Sign in to see your tickets

They are listed here whenever you are signed in.

Sign in with Google