Race Entry Software API Documentation


This API was designed specifically for the Director software to allow certain timers and directors integration into our Race Entry data with the Director.

The Login action must be called first as it returns the key/secret pair that is required for the other endpoints.

All responses are returned in JSON format.

Any errors in the response will be returned in an object called 'message':

{
"message": "The details of the error message"
}

*All test endpoints start with https://demo.raceentry.com/softwareapi

*All production endpoints start with https://www.raceentry.com/softwareapi





API USER CREATION

Before a user can access any race data, they must have an API key and token. This is only provided to users that exist in Race Entry’s user database. This function allows an authorized Race Entry partner to create users in our user database that do not yet exist in our database. These created users are then also given an API key and token to access Race Entry race information.

This feature cannot create authorized Race Entry API partners. You must contact Race Entry to receive a Race Entry partner API key and token to use this feature.

ENDPOINT POST FIELDS RESPONSE

/user/create

This will return a temporary key/secret pairfor the user (valid for 2 days).


http://demo.raceentry.com/softwareapi/user/create?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH

Parameter Format Required
first_name string
(limit 32 characters)
YES
last_name string
(limit 32 characters)
YES
organization string
(limit 48 characters)
YES
phone string
(limit 30 characters)
YES
email string
(limit 120 characters)
YES
password string
(limit 32 characters)
YES

Success:

Response Code: 200

{
"tmp_key":"KEY_HASH",
"tmp_secret":"SECRET_HASH",
"user": {
"user": {
"first_name":"John",
"last_name":"Doe"
}
}
}

The tmp_key is hashed in our database, so it is important to save this key and associate it with the user before discarding the response data!


Failure:

Response Code: 200

{
"message":"Failed to create the user or user already exists"
}

RACE CREATION DATA

This endpoint allows an authenticated user to access arrays of ID and name data for event_types, timezones, and states which are needed to create an event with the /event/create and event/copy endpoints.

ENDPOINT RESPONSE

/event/get_create_data


http://demo.raceentry.com/softwareapi/event/get_create_data?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH

Success:

Response Code: 200

{
"event_types": [
{
"id": "1",
"name": "Running/Walking"
},
{
"id": "2",
"name": "Biking"
},
{
"id": "3",
"name": "Triathlon"
},
{
"id": "4",
"name": "Duathlon"
},
{
"id": "6",
"name": "Virtual Event"
},
{
"id": "7",
"name": "OCR"
},
{
"id": "10",
"name": "Other"
}
],
"timezones": [
{
"id": "1",
"name": "America/Denver"
},
{
"id": "2",
"name": "America/New_York"
},
{
"id": "3",
"name": "America/Chicago"
},
{
"id": "4",
"name": "America/Phoenix"
},
{
"id": "5",
"name": "America/Los_Angeles"
},
{
"id": "6",
"name": "America/Anchorage"
},
{
"id": "7",
"name": "Pacific/Honolulu"
}
],
"states": [
{
"id": "1",
"abbr": "AL"
"name": "Alabama"
"selected": "0"
},
{
"id": "2",
"abbr": "AK"
"name": "Alaska"
"selected": "0"
},
{
"id": "3",
"abbr": "AZ"
"name": "Arizona"
"selected": "0"
},
{
"id": "4",
"abbr": "AR"
"name": "Arkansas"
"selected": "0"
},
{
"id": "5",
"abbr": "CA"
"name": "California"
"selected": "0"
},
...
]
}

RACE CREATION

This endpoint allows an authenticated user to create an event. The event is always default "calendar listing" which means adding registration, ticketing, payee information, and other event configuration must be done through Race Entry's website.

This is a POST request that expects the tmp_key and tmp_secret to be in GET parameters and the rest of the payload to be POST data.

ENDPOINT POST FIELDS RESPONSE

/event/create


http://demo.raceentry.com/softwareapi/event/create?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH


Use the /event/get_create_data endpoint to get IDs and names for event_types, timezones, and states

Parameter Format Required
event[event-name] string
(between 4 - 128 characters)
YES
event[event-dom-timezone-id] enum
(1, 2, 3, 4, 5, 6, or 7)
YES
event[event-description] string
(min 4 characters)
YES
event[event-external-url] string
(limit 256 characters)
YES
event[event-type-id] enum
(1, 2, 3, 4, 5, 6, 7, or 10)
YES
event[contact-first-name] string
(limit 32 characters)
YES
event[contact-last-name] string
(limit 32 characters)
YES
event[contact-email] string
(limit 255 characters)
YES
eventYear[event-year-address] string
(limit 64 characters)
YES
eventYear[event-year-city] string
(limit 32 characters)
YES
eventYear[event-year-state] int
(1 - 60)
YES
eventYear[event-year-country] enum
(USA only)
YES
eventYear[event-year-zipcode] string
(between 3 - 10 characters)
YES
eventYear[event-year-datetime] timestamp
(mm/dd/YYYY HH:mm)
YES
eventYear[terms-initials] string
(between 2 - 4 characters)
YES

Success:

Response Code: 200

{
"success": true,
"url":"fake-api-event",
"year": "2019",
}

Failure (validation):

Response Code: 400

{
"event": {
"name": "A event with this name already exists. Please change your event name to make it unique. You could add a location, number, company name, etc. to make it unique.",
"url": "A event is already using this URL. If this is your event, you can claim it HERE"
}
}

Failure (server):

Response Code: 500

{
"message":"The event could not be created - internal error. Please contact support"
}

RACE COPY TO NEXT YEAR

This endpoint allows an authenticated user to copy an existing event to a new year.

In Race Entry, 'events' have multiple 'event_years'. If an event has the same name but occurs yearly, it is considered to be an existing event but needs a new event_year for every calendar year that the event occurs.

This endpoint should be used to create new event years for an existing event.

Categories, products and volunteer information is not copied over automatically and should be re-added on Race Entry.

This is a POST request that expects the tmp_key and tmp_secret to be in GET parameters and the rest of the payload to be POST data.

ENDPOINT POST FIELDS RESPONSE

/event/copy


http://demo.raceentry.com/softwareapi/event/copy?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH


Use the /event/get_create_data endpoint to get IDs and names for event_types, timezones, and states

Parameter Format Required
event_id_to_copy int
YES
event[event-dom-timezone-id] enum
(1, 2, 3, 4, 5, 6, or 7)
YES
event[event-description] string
(min 4 characters)
YES
event[event-external-url] string
(limit 256 characters)
YES
event[event-type-id] enum
(1, 2, 3, 4, 5, 6, 7, or 10)
YES
event[contact-first-name] string
(limit 32 characters)
YES
event[contact-last-name] string
(limit 32 characters)
YES
event[contact-email] string
(limit 255 characters)
YES
eventYear[event-year-address] string
(limit 64 characters)
YES
eventYear[event-year-city] string
(limit 32 characters)
YES
eventYear[event-year-state] int
(1 - 60)
YES
eventYear[event-year-country] enum
(USA only)
No
eventYear[event-year-zipcode] string
(between 3 - 10 characters)
YES
eventYear[event-year-datetime] timestamp
(mm/dd/YYYY HH:mm)
YES
eventYear[terms-initials] string
(between 2 - 4 characters)
YES

Success:

Response Code: 200

{
"success": true,
"url":"fake-api-event",
"year": "2020",
}

Failure (validation):

Response Code: 400

{
"event_year": {
"year": "This year has already been created for your event. Please enter a different year or find the existing year in your list of events"
}
}

Failure (server):

Response Code: 500

{
"message":"The event could not be copied - internal error. Please contact support"
}

RACE INFORMATION

These are the endpoints that will return information about and set certain settings for races. They will only give information about races that the user (determined by the key/secret pair) has permission to access.

Query Parameters

Parameter Format Value Affect Applies To
tmp_key string Returned from login API call Allows authorized access to API endpoints All (required)
tmp_secret string Returned from login API call Allows authorized access to API endpoints All (required)
event_id int Specifies the event from which to retreive results get_event_categories (required)
get_event_participants (required)
get_event_pin (required)
set_event_pin (required)
category_id int Specifies the category from which to retreive results get_event_teams (required)
get_category_teams (required)
get_event_participants (optional filter)
results_per_page int Limits the number of results to return All (optional)
page_number int Determines the offset from which to return results All (optional)
has_bib enum: 'all', 'yes', 'no' 'all' will return all results regardless of bib number (default)
'yes' will only return results that have an assigned bib number
'no' will only return results that have no set bib number
get_event_participants (optional)
checked_in enum: 'all', 'yes', 'no' 'all' will return all results regardless of checked-in status (default)
'yes' will only return results that have been checked-in
'no' will only return results that have not been checked in
get_event_participants (optional)
get_responses enum: yes', 'no' 'no' will only return primary registration data with no custom registration question responses (default)
'yes' return an array of registration question responses per registration
get_event_participants (optional)
modified_after string YYYY-MM-DD HH:MM:SS Returns only results that have been modified after the given timestamp get_event_participants (optional)

Endpoints

ENDPOINT RESPONSE

/get_events

Returns an array of races

Note: Failure returns a status code of 403


http://demo.raceentry.com/softwareapi/get_events?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH

Success:

Response Code: 200

[
{
"event_id": "12345",
"name": "Jane's Demo Event",
"event_type": "Running/Walking",
"event_logo": "https://s3-us-west-2.amazonaws.com/images.raceentry.com/logo/janes-demo-event-registration-logo-12345.png?v=123456789",
"url": "janes-demo-event",
"description": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>This is a demo description returned as HTML.</p></body></html>\n",
"last_modified": "2019-06-05 13:31:32",
"contact_first_name": "Jane",
"contact_last_name": "Director",
"contact_email": "janedirector@fakeevent.com",
"event_date": "2019-06-12 11:00:00",
"street": "100 W 200 N",
"city": "Provo",
"state": "Utah",
"province": null,
"country": "USA",
"zipcode": "84604"
},
{
"event_id": "123456",
"name": "John's Test Event",
"event_type": "Triathlon",
"event_logo": null,
"url": "johns-test-event",
"description": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>Another example of a test race description</p></body></html>\n",
"last_modified": "2019-01-18 12:20:49",
"contact_first_name": "John",
"contact_last_name": "Doe",
"contact_email": "jdoe@notrealemail.com",
"event_date": "2020-05-09 12:00:00",
"street": "205 E Randolph St",
"city": "Chicago",
"state": "IL",
"province": null,
"country": "USA",
"zipcode": "60601"
},
]

/get_event_categories

Returns an array of categories

Requires event_id in the GET request

Categories are sometimes called sub-events in other platforms.

A category is a Marathon, 10K, 5K, etc. in a race event


http://demo.raceentry.com/softwareapi/get_event_categories?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&event_id=12345

Success:

Response Code: 200

[
{
"category_id": "123",
"category_name": "Marathon",
"category_details": "This is the main marathon category for this event",
"distance": "26.2000",
"distance_units": "Mi",
"participant_cap": "2500"
},
{
"category_id": "124",
"category_name": "10K",
"category_details": null,
"distance": "10.0000",
"distance_units": "Km",
"participant_cap": "unlimited"
},
{
"category_id": "125",
"category_name": "Half Marathon",
"category_details": "Another description of this category (sub-event)",
"distance": "13.1000",
"distance_units": "Mi",
"participant_cap": "unlimited"
}
]

Failure:

Response Codes: 400

{
"message": "Event ID required"
}

/get_event_questions

Returns an array of active registration questions in the event

If the question has selectable options, they are returned as an array of option IDs and options text

Requires category_id in the GET request


http://demo.raceentry.com/softwareapi/get_event_questions?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&event_id=12345



Possible Question Types

Type Description
Single Line Text Answers with free-form responses up to 256 characters
MultiLine Text Allow registrants to write responses longer than 256 characters
Dropdown Allow registrants to select from a dropdown list of options
Radio Allow registrants to select from options with radio buttons
Checkbox Allow registrants to select multiple checkboxes
Pace Allow registrants to enter a time
Runner Editable Dropdown Participants can add choices to the dropdown

Success:

Response Code: 200

[
{
"question_id": "860",
"question_text": "T-Shirt Size",
"question_type": "Dropdown",
"options": [
{
"id": "4658",
"text": "S"
},
{
"id": "4659",
"text": "M"
},
{
"id": "4661",
"text": "L"
}
]
},
{
"question_id": "861",
"question_text": "Emergency Contact Name",
"question_type": "Single Line Text",
"options": null
},
{
"question_id": "863",
"question_text": "Emergency Contact Phone",
"question_type": "Single Line Text",
"options": null
},
{
"question_id": "872",
"question_text": "How did you hear about the event?",
"question_type": "Dropdown",
"options": [
{
"id": "4984",
"text": "Web Search"
},
{
"id": "4985",
"text": "Friend/Family"
},
{
"id": "4986",
"text": "Facebook"
},
{
"id": "4987",
"text": "Past Participant"
},
{
"id": "4988",
"text": "Other"
}
]
}
]

Failure:

Response Codes: 400

{
"message": "Event ID required"
}

/get_event_participants

Returns an array of partipants only

Requires event_id in the GET request


http://demo.raceentry.com/softwareapi/get_event_participants?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&event_id=12345

Success: default

Response Code: 200

[
{
"participant_id": "10101",
"category_id": "125",
"category_name": "Half Marathon",
"team_id": null,
"team_name": null,
"first_name": "Bob",
"last_name": "Person",
"email": "bperson@somedomain.com",
"address": "100 N 200 E",
"city": "Provo",
"bib_num": "123",
"price": "12.34",
"discount": "12.34",
"province": null,
"state": "Utah",
"zipcode": "84604",
"dob": "1989-07-07",
"gender": "M",
"last_modified": "2019-01-04 12:49:39",
"phone": "8015554214",
"checked_in": "yes"
},
{
"participant_id": "10102",
"category_id": "123",
"category_name": "Marathon",
"team_id": null,
"team_name": null,
"first_name": "Mary",
"last_name": "Runner",
"email": "maryruns@fakedomain.com",
"address": "500 S 200 E",
"city": "Orem",
"bib_num": null,
"price": "12.34",
"discount": "12.34",
"province": "",
"state": "Utah",
"zipcode": "84097",
"dob": "1989-08-08",
"gender": "F",
"last_modified": "2019-01-10 16:15:10",
"phone": "3145550987",
"checked_in": "no"
},
...
]

Success: (get_responses=yes)

Response Code: 200

[
{
"participant_id": "10101",
"category_id": "125",
"category_name": "Half Marathon",
"team_id": null,
"first_name": "Bob",
"last_name": "Person",
"email": "bperson@somedomain.com",
"address": "100 N 200 E",
"city": "Provo",
"bib_num": "123",
"price": "12.34",
"discount": "12.34",
"province": null,
"state": "Utah",
"zipcode": "84604",
"dob": "1989-07-07",
"gender": "M",
"last_modified": "2019-01-04 12:49:39",
"phone": "8015554214",
"checked_in": "yes",
"responses": [
{
"qid": "860",
"q": "T-Shirt Size",
"qoid": "19923",
"ans": "Large"
},
{
"qid": "861",
"q": "Emergency Contact Name",
"qoid": "",
"ans": "Bethany Person"
},
{
"qid": "863",
"q": "Emergency Contact Phone",
"qoid": "",
"ans": "3145557761"
},
{
"qid": "872",
"q": "How did you hear about the event?",
"qoid": "5124",
"ans": "Family/Friend"
}
]
},
{
"participant_id": "10102",
"category_id": "123",
"category_name": "Marathon",
"team_id": null,
"first_name": "Mary",
"last_name": "Runner",
"email": "maryruns@fakedomain.com",
"address": "500 S 200 E",
"city": "Orem",
"bib_num": null,
"price": "12.34",
"discount": "12.34",
"province": "",
"state": "Utah",
"zipcode": "84097",
"dob": "1989-08-08",
"gender": "F",
"last_modified": "2019-01-10 16:15:10",
"phone": "3145550987",
"checked_in": "no",
"responses": [
{
"qid": "860",
"q": "T-Shirt Size",
"qoid": "19920",
"ans": "Small"
},
{
"qid": "861",
"q": "Emergency Contact Name",
"qoid": "",
"ans": "Jordan Runner"
},
{
"qid": "863",
"q": "Emergency Contact Phone",
"qoid": "",
"ans": "8015554789"
},
{
"qid": "872",
"q": "How did you hear about the event?",
"qoid": "5121",
"ans": "Billboard"
}
]
},
...
]

Failure:

Response Codes: 400

{
"message": "Event ID required"
}

/get_event_teams

Returns an array of category IDs with arrays of teams

Returns empty category ID for event-wide teams (teams across categories)

Requires event_id in the GET request


http://demo.raceentry.com/softwareapi/get_event_teams?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&event_id=12345

Success:

Response Code: 200

{
"126": [
{
"team_id": "111",
"team_name": "Tate's Tater Tots",
"captain_reg_id": "10103",
"captain_name": "Isaiah Bespoken",
"captain_email": "isaiah_besp@email.com",
"password_required": "1",
"password": "Allegiant",
"category_id": "126"
},
{
"team_id": "112",
"team_name": "Captain Jacks",
"captain_reg_id": "10104",
"captain_name": "Jack Dillon",
"captain_email": "dillon.jack@phone.net",
"password_required": "1",
"password": "russyrach2",
"category_id": "126"
}
],
"127": [
"team_id": "113",
"team_name": "Cate's Chasers",
"captain_reg_id": "10105",
"captain_name": "Cathleen Farnsworth",
"captain_email": "caty_worth@fakeaccount.com",
"password_required": "0",
"password": null,
"category_id": "127"
},
{
"team_id": "114",
"team_name": "Bombastic Baddies",
"captain_reg_id": "10106",
"captain_name": "Gladys O'Brien",
"captain_email": "gladys.obrien@email.net",
"password_required": "0",
"password": null,
"category_id": "127"
}
]
}

Failure:

Response Codes: 400

{
"message": "Event ID required"
}

/get_category_teams

Returns an array of teams in a category

Cannot return event-wide teams (teams across categories)

Requires category_id in the GET request


http://demo.raceentry.com/softwareapi/get_category_teams?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&category_id=126

Success:

Response Code: 200

[
{
"team_id": "111",
"team_name": "Tate's Tater Tots",
"captain_reg_id": "10103",
"captain_name": "Isaiah Bespoken",
"captain_email": "isaiah_besp@email.com",
"password_required": "1",
"password": "Allegiant",
"category_id": "126"
},
{
"team_id": "112",
"team_name": "Captain Jacks",
"captain_reg_id": "10104",
"captain_name": "Jack Dillon",
"captain_email": "dillon.jack@phone.net",
"password_required": "1",
"password": "russyrach2",
"category_id": "126"
}
]

Failure:

Response Codes: 400

{
"message": "Category ID required"
}

/get_event_pin

Returns the Check In app access PIN for an event, the expiration, and status of access (enabled / disabled)

Requires event_id in the GET request


http://demo.raceentry.com/softwareapi/get_event_pin?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&event_id=12345

Success: default

Response Code: 200

{
"pin": "1234",
"expires": "2019-08-10 23:59:59",
"access": "enabled"
}

Failure:

Response Codes: 200

{
"message": "No PIN found for this event"
}

/set_event_pin

Sets a Check In app event access PIN

Requires 'event_id' as a URL param and 'pin' in the POST request


PIN must be between 4 and 8 characters and contain only numbers


http://demo.raceentry.com/softwareapi/set_event_pin?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&event_id=12345

post_data: {pin: 1234 }

Success: default

Response Code: 200

{
"pin": "1234",
"expires": "2019-08-10 23:59:59",
"access": "enabled"
}

Failure:

Response Codes: 400

{
"message": "Event ID required"
}

/set_event_app_access

Sets a Check In app event access PIN to enabled or disabled (if there is a PIN)

Requires 'event_id' as a URL param and 'enabled' in the POST request


'enabled' must be a '1' or '0'. '1' enables the PIN and '0' disables it.


http://demo.raceentry.com/softwareapi/set_event_app_access?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&event_id=12345

post_data: {enabled: 0 }

Success: default

Response Code: 200

{
"pin": "1234",
"expires": "2019-08-10 23:59:59",
"access": "disabled"
}

Failure:

Response Codes: 200

{
"message": "No PIN found for this event"
}

INDIVIDUAL RACE RESULTS

This section contains the information and endpoints for editing and deleting individual race result entries.

ENDPOINT POST FIELDS RESPONSE

/result/edit

Edits the result identified by result_info by the data provided in new_values.


http://demo.raceentry.com/softwareapi/result/edit?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH

Parameter Format Required
result_info JSON encoded array of the desired result's information. See example for details. YES
new_values JSON encoded array of the values to be updated. See example for details. YES

Success:

Response Code: 200

{
"message":"Result edited"
}

Failure:

Response Codes: 400, 403, 500

{
"message":"Error message details"
}

/result/delete

Deletes the result identified by result_info.


http://demo.raceentry.com/softwareapi/result/delete?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH

Parameter Format Required
result_info JSON encoded array of the desired result's information. See example for details. YES

Success:

Response Code: 200

{
"message":"Result deleted"
}

Failure:

Response Codes: 400, 403, 500

{
"message":"Error message details"
}

Result JSON Parameters

This section contains detailed information on what to include in the JSON parameters listed in the above individual race results endpoints.

JSON PARAMETER FIELDS EXAMPLES

result_info

This is used to identify the individual results. If id is provided, none of the other fields are required. Otherwise, all other fields except bib_number are required.

Index Value
id RaceEntry's id for the result. If id is provided, it is the only required input.
name The whole recorded in the result.
bib_number The bib number recorded in the result.
event_id RaceEntry's id for the event to which the result belongs.
year The year (in YYYY format) of the result's event.

Example #1:

Only using id.

{
"id":11111
}

Example #2:

Without using id.

{
"name":"Jane Doe",
"event_id":12345,
"year":2020
}

new_values

This is used to define the new values for a result. At least one field must be provided (can be any of the fields). If a field is submit as an empty string, that field will be deleted from the result.

Index Format Value
bib_number INT The bib number to be associated with the result.
whole_name STR The whole name to be associated with the result. Use either this field or the first_name and last_name fields
first_name STR The first_name to be associated with the result. Use this in conjunction with the last_name field. Do not use this in conjunction with the whole_name field.
last_name STR The last name to be associated with the result. Use this in conjunction with the first_name field. Do not use this in conjunction with the whole_name field.
city STR The city to be associated with the result.
state STR The state to be associated with the result.
country STR The country to be associated with the result.
gender CHAR The character representation of the gender to be associated with the result.
age INT The age to be associated with the result.
gun_time "HH:MM:SS.ss" The gun time to be associated with the result.
chip_time "HH:MM:SS.ss" The chip time to be associated with the result.
overall_place INT The overall place to be associated with the result.
age_gender_division_place INT The place to be associated with the result for the result's age and gender division.
pace STR The pace to be associated with the result.
division STR The division to be associated with the result.
custom_1 STR First custom value to be associated with the result.
custom_2 STR Second custom value to be associated with the result.
custom_3 STR Third custom value to be associated with the result.
custom_4 STR Fourth custom value to be associated with the result.
custom_5 STR Fifth custom value to be associated with the result.
custom_6 STR Sixth custom value to be associated with the result.

Example #1:

Only one value.

{
"whole_name":"John Doe"
}

Example #2:

Several Values, while deleting the value under city.

{
"bib_number":55,
"first_name":"Jane",
"last_name":"Doe",
"city":"", "state":"Washington",
"country":"USA",
"gender":"F",
"age":36,
"gun_time":"00:55:32.78",
"overall_place":12,
"age_gender_division_place":5,
"division":"Female 35 to 39",
"custom_2":"Pizza",
"custom_6":"Team Underdog"
}

RACE RESULTS UPLOAD

API users can upload race results following a standard GRU format that is in a JSON encoded array of arrays.

ENDPOINT POST FIELDS RESPONSE

/upload/results


http://demo.raceentry.com/softwareapi/upload/results?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH

Parameter Format Required
event_id int
The Race Entry race year identifier
append bool
(1 or 0)
YES
results JSON encoded array of GRU data.
Each row should be an array element containing array elements for each column.
See example for details
The JSON encoded race results with a header row and data rows

Success:

Response Code: 200

{
"message": "Results uploaded"
}

Failure:

Response Codes: 400, 403, or 500

{
"message": "Error message details"
}

Results JSON Format

Accepted Headers

Header Name Corrosponding Data Corrosponding Data Format Required
whole_name The full name of the participant string
(limit 64 characters)
Yes (if first_name and last) name is not provided
first_name The participant’s first name string
(limit 32 characters)
Yes (if whole_name is not provided)
last_name The participant’s last name string
(limit 32 characters)
Yes (if whole_name is not provided)
gun_time The participant’s result finish time from gun fire time Time (hh:mm:ss.ss)
or
(hh:mm:ss)
Yes (if chip_time is not provided)
chip_time The participant result finish time based on chip time Time (hh:mm:ss.ss)
or
(hh:mm:ss)
Yes (if gun_time is not provided)
age_group The participant age group string
(limit 32 characters)
No
age_group_place The participant’s place in his or her age group int Yes (if overall_place or gender_place is not provided)
bib_number The participant’s bib number int Yes
overall_place The participants overall place in the race int Yes (if gender_place or age_group_place is not provided)
pace The participant’s overall pace Time (hh:mm:ss.ss)
or
(hh:mm:ss)
No
category The participant’s race category (marathon, half, 10K, etc.) string
(limit 32 characters)
Yes
gender The participant’s gender char
(limit 1 character)
No
gender_place The participant’s finish place based on his or her gender int Yes (if overall_place or age_group_place is not provided)
city The participant’s city string
(limit 64 characters)
No
state The participant’s state string
(limit 64 characters)
No
country The participant’s country string
(limit 48 characters)
No
age The participant’s age int No
age_division The participant’s age group string
(limit 32 characters)
No
any custom header string The first custom field of data string
(limit 32 characters)
No
any custom header string The second custom field of data string
(limit 32 characters)
No
any custom header string The third custom field of data string
(limit 32 characters)
No
any custom header string The fourth custom field of data string
(limit 32 characters)
No
any custom header string The fifth custom field of data string
(limit 32 characters)
No
any custom header string The sixth custom field of data string
(limit 32 characters)
No

Warning! The first 6 unrecognized headers are considered to be custom fields and the header names and corresponding row data will be saved in the results as custom fields to display in the results

Result Request GRU Data Format Example

The following are examples of the expected format of the GRU data. Notice the first array element consists of header names. The subsequent array elements are the result row data corresponding to the header rows. The final JSON encoded array of arrays is the expected API format.


[
[
"first_name",
"last_name",
"category",
"bib_number",
"overall_place",
"chip_time",
"Split Time 1"
],
[
"John",
"Doe",
"Marathon",
"2301",
"43",
"3:57:32.3",
"1:43:12.0"
],
[
"Jane",
"Doe",
"Marathon",
"2432",
"315",
"4:15:12.8",
"2:17:54.9"
]
]

CLUB INFORMATION

These are the endpoints that will return information about clubs. They will only give information about clubs that the user (determined by the key/secret pair) has permission to access.

Query Parameters

Parameter Format Value Affect Applies To
tmp_key string Returned from login API call Allows authorized access to API endpoints All (required)
tmp_secret string Returned from login API call Allows authorized access to API endpoints All (required)
club_id int Specifies the club from which to retreive results get_members (required)
active_status enum: 'Complete', 'Incomplete', 'Deleted', 'Completed Dupicate', 'Pending Edit' Specifies the status of the members from which to retreive results get_members (optional)
status_id int Specifies the status of the members from which to retreive results using status id rather than status name get_members (optional)
start_date 'YYYY-MM-DD' Only returns members whos memberships have not expired as of this date get_members (optional)
end_date 'YYYY-MM-DD' Only returns members whos memberships have not expired before this date get_members (optional)

Endpoints

ENDPOINT RESPONSE

memberships/get-clubs

Returns an array of clubs

Note: Failure returns a status code of 403


http://demo.raceentry.com/softwareapi/memberships/get-clubs?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH

Success:

Response Code: 200

[
{
"id": "12345",
"site_id": "1",
"company_id": "12345",
"payee_id": "12345",
"tax_exempt": "0",
"processor_id": "12345",
"currency_id": "123",
"disabled": "1",
"name": "My Club",
"url": "my-club",
"external_url": "https://www.myclub.com/home",
"description": "<p>This is my club's description</p>",
"membership_by_location": "1",
"contact_first_name": "John",
"contact_last_name": "Doe",
"contact_email": "jdoe@notrealemail.com"
"created_by": "12345"
"created_date": "1970-01-01 00:00:00"
"terms_initials": "jd"
},
{
"id": "12345",
"site_id": "1",
"company_id": "12345",
"payee_id": "12345",
"tax_exempt": "0",
"processor_id": "12345",
"currency_id": "123",
"disabled": "1",
"name": "Our Club",
"url": "our-club",
"external_url": "https://www.ourclub.com/home",
"description": "<p>This is our club's description</p>",
"membership_by_location": "1",
"contact_first_name": "Jane",
"contact_last_name": "Doe",
"contact_email": "jadoe@notrealemail.com"
"created_by": "12345"
"created_date": "1970-01-01 00:00:00"
"terms_initials": "jd"
},
]

memberships/get-members

Returns an array of clubs


http://demo.raceentry.com/softwareapi/memberships/get-clubs?tmp_key=KEY_HASH&tmp_secret=SECRET_HASH&club_id=12345

Success:

Response Code: 200

[
{
"id": "12345",
"hash": "alkjsdfiknavio",
"club_id": "12345",
"group_id": "12345",
"status_id": "2",
"email": "jd@gmail.com",
"first_name": "John",
"last_name": "Doe",
"address": "1234 fake road",
"city": "New York",
"state_id": "1",
"province": "null",
"zip": "12345",
"country_code": "USA",
"phone": "1234567890",
"birthdate": "1970-01-01"
"gender": "M"
"waiver_initials": "jd"
"waiver_signature": "john doe"
"last_modified": "1970-01-01 00:00:00"
"subscription_id": "12345"
"start_date": "1970-01-01"
"expiration_date": "2100-01-01"
"paid_member_count": "100"
},
{
"id": "12345",
"hash": "alkjsdfiknavio",
"club_id": "12345",
"group_id": "12345",
"status_id": "2",
"email": "jd@gmail.com",
"first_name": "Jane",
"last_name": "Doe",
"address": "1234 fake road",
"city": "New York",
"state_id": "1",
"province": "null",
"zip": "12345",
"country_code": "USA",
"phone": "1234567890",
"birthdate": "1970-01-01"
"gender": "F"
"waiver_initials": "jd"
"waiver_signature": "jane doe"
"last_modified": "1970-01-01 00:00:00"
"subscription_id": "12345"
"start_date": "1970-01-01"
"expiration_date": "2100-01-01"
"paid_member_count": "100"
]

Failure:

Response Codes: 400

{
"message": "Club ID required"
}