Skip to content

Milestone 1 · Source review

What each provider documents, allows and actually returns

Reviewed on November 10, 2026 against each provider's published API documentation and terms of use. Only documented APIs are used — no scraping, no workarounds.

RunSignup

Integrated

Verdict · Integrate now (priority 1).

Authentication
None required for public race data (optional API v2 key/secret, OAuth 2.0, affiliate token)
Documented limit
Keep requests to no more than 2 concurrent API calls at a time.
What we apply
1 call at a time, 60 s start-to-start spacing, exponential backoff on 429/5xx.
Endpoints used
GET /rest/races

Discovery: paginated, events=T for sub-events + registration periods, modified_since for incremental syncs.

GET /rest/race/:race_id

Target list detail: include_participant_caps=T, include_extra_date_info=T.

Terms & notes

Open API released under a free-use Apache licence for the interface; content stays under RunSignup's service agreements. Affiliate Program explicitly supports race directories (aflt_token appended to race URLs, revenue share). Registration periods (opens/closes, race_fee, processing_fee) and participant_cap are documented and returned publicly. Registration counts and waitlists require race-director authorization -> unavailable.

ACTIVE Network

Needs API key

Verdict · Adapter built against the documented schema; activates when ACTIVE_API_KEY is added.

Authentication
api_key query parameter (self-service registration at developer.active.com, Mashery)
Documented limit
2 calls per second; 500,000 calls per day; key active upon registration.
What we apply
1 call at a time, 60 s spacing (far below the documented throttle).
Endpoints used
GET /v2/search

Discovery by query/near/radius/state/start_date range/topic, paginated by current_page.

Terms & notes

Search API v2 documents event name, dates, place, registrationUrlAdr, salesStartDate/salesEndDate, salesStatus, assetPrices, assetComponents and currencyCd. No capacity, registration-count or waitlist field is documented (estParticipantNb is an estimate and is not used). Terms require ACTIVE branding next to displayed ACTIVE data and written consent for resale/fees. Unauthenticated and demo-key calls return 403, so a production key must be issued and verified before go-live.

Race Roster

Partner-gated

Verdict · Request partner access; adapter reports 'partner_gated' on every run until granted.

Authentication
OAuth 2.0 developer credentials issued by Race Roster (partner portal)
Documented limit
Limits are set per API in the gated documentation and enforced at Race Roster's discretion (ToS §2.D).
What we apply
No calls until documented access is granted.
Terms & notes

Developer docs require a partner sign-in; the only public page is the timing-partner Results field schema. /api/v1 returns 401 without credentials. API ToS §2.C: access only by the means described in that API's documentation, so no alternative access method is used.

Field availability

Field-by-field, per provider

Every directory field mapped to its documented source field. Hover a cell for the exact source path and note. Also available as CSV.

●Available◐Optional at source○Not offered◇Partner-gated
Directory fieldRunSignupACTIVE NetworkRace Roster

Event identifier

event_id
● Availablerace.race_id● AvailableassetGuid◇ Partner-gated

Event name

event_name
● Availablerace.name● AvailableassetName◇ Partner-gated

Sub-event / distance identifier

sub_event_id
● Availableevents[].event_id● AvailableassetComponents[].assetGuid◇ Partner-gated

Sub-event name

sub_event_name
● Availableevents[].name● AvailableassetComponents[].assetName◇ Partner-gated

Distance

distance
● Availableevents[].distance● AvailableassetAttributes[] (Distance (running))◇ Partner-gated

Event date / start time

event_date
● Availableevents[].start_time● AvailableactivityStartDate◇ Partner-gated

Event end time

event_end
● Availableevents[].end_time● AvailableactivityEndDate◇ Partner-gated

Location (city / state / postal)

location
● Availablerace.address● Availableplace◇ Partner-gated

Latitude / longitude

coordinates
○ Not offered● Availableplace.latitude / place.longitude◇ Partner-gated

Official registration URL

registration_url
● Availablerace.url● AvailableregistrationUrlAdr◇ Partner-gated

Registration status

registration_status
● Availablerace.is_registration_open + events[].registration_periods● AvailablesalesStatus◇ Partner-gated

Registration open / close dates

registration_window
● Availableregistration_periods[].registration_opens / registration_closes● AvailablesalesStartDate / salesEndDate◇ Partner-gated

Current price

current_price
● Availableregistration_periods[].race_fee● AvailableassetPrices[].priceAmt◇ Partner-gated

Price-change dates

price_change_dates
● Availableregistration_periods[] boundaries● AvailableassetPrices[] effective dates◇ Partner-gated

Processing fee

processing_fee
● Availableregistration_periods[].processing_fee○ Not offered◇ Partner-gated

Maximum capacity (limit)

capacity_max
● Availableevents[].participant_cap○ Not offered◇ Partner-gated

Current registrations

registered_count
○ Not offered○ Not offered◇ Partner-gated

Remaining slots

remaining_capacity
○ Not offered○ Not offered◇ Partner-gated

Waitlist status

waitlist
○ Not offered○ Not offered◇ Partner-gated

Cancellation / postponement

cancellation
● Availablepostponed_cancelled_text● AvailablesalesStatus / assetStatus◇ Partner-gated

Relative countdown (e.g. 'price rises in 3 days')

relative_countdown
○ Not offered○ Not offered◇ Partner-gated

Currency

currency
◐ Optional at source● AvailablecurrencyCd◇ Partner-gated

Source last-modified time

last_modified
● Availablerace.last_modified● AvailablemodifiedDate◇ Partner-gated

Retrieval timestamp

retrieved_at
● Availablepipeline● Availablepipeline● Availablepipeline

Findings & limitations

Things you should know before launch

01

RunSignup caps public search at 1,000 results

Its documented race search stops after the first page of 1,000. The pipeline splits the US by state — and a busy state by date halves — so nothing is silently dropped, and it records when a slice still hits the cap.

02

Capacity is per race, not per search

RunSignup returns participant caps only from the single-race endpoint. That is why the target list matters: races you add get caps on every run; the broad sweep reports caps as "not retrieved" rather than guessing.

03

Registration counts are private by design

Participant counts, remaining spots and waitlists on RunSignup require each race director's authorization. The record says so explicitly — it never infers spots remaining.

04

ACTIVE is ready the moment a key exists

The ACTIVE Activity Search v2 adapter is built and tested against the documented response shape. Register a free key, add it as a secret, and it joins the next nightly run with the required ACTIVE attribution.

05

Race Roster requires partner approval

Race Roster's API is documented but issued only to approved partners, and its licence forbids scraping. The adapter makes zero requests and reports "partner_gated" until credentials are granted.