RTRT.me - Real Time Race Tracking

Real-Time Race Tracking for World-Class Events

Profile Fields:

The aim of our Roster Import utility is to accept a variety of data formats and participant profile fields. During import, our system will remap certain fields to ensure compatibility with our overall suite of products.

General Roster Standards:

All roster field names in your file ( or as delivered via the Admin API ) will be converted to lowercase, alpha-numeric only during import. No punctuation or special characters will remain except for '_' (underscore). We automatically replace spaces and hyphens with underscores. For Example:

A field name such as 'Emergency Contact #' would be converted to 'emergency_contact_number'.

Additionally, some common field name variations will be remapped in order to help standardized profile data in our system. For example:

'firstname','first_name', or 'name1' will be saved as 'fname' in our system.

'category' or 'competition' will be saved as 'division' in our system.

There is no restriction the number of fields you can import, and it is up to you to decide which fields you want to have stored in our system (controllable via the Roster Options->Keep Roster Fields setting). By default, our system will only publicly expose fields that are required for the published tracking features.

https://go.rtrt.me/docs/api/profile-fields#public-fieldsClick here for a current list of standardly public accessible fields. _curr_pid, _curr_sku_id, _fundraiser, _guest_type, _host_pid, _race_skus, _trackercheer, _ver, bib, bib_display, charity, city, claim_mode, claim_pending, claimed_by, class, country, country_iso, course, custom_public_a, custom_public_b, fname, gps_assist, gps_remote, hide, i, import_source, lname, name, nocheer, noclaim, nophoto, pid, profile_color, profile_pic, pstatus, pstatus_note, pstatus_sub, race, segid, sex, strava_activity, tag, tags, team, and u

NOTE: Many of the fields listed such as 'a', 'i', 'u' or those that start with an _(underscore) are internally required and are non-customizable.

Here are a few fields that will always present after your import. These fields do not necessarily need to be in the source since the system will construct some fields by looking at others (see Import Logic below).

fname, lname and name.  Every participant will have a first and last name mapped as 'fname' and 'lname'.  These two will be combined to also create a 'name' field.  If only a full name (single field) is provided in your roster, use field 'name'.  We will parse that field to create 'fname' and 'lname'.  NOTE: If no 'fname' can be derived, we default to 'Runner'.

tag. This refers to the RFID identifier as worn by the participant.  Tag is used internally to match timing data to participants, and is not visible to public.  Every participant should have a unique tag. Tags may be zero padded such as 0000212 during import.  

bib. This refers to the visible label worn by the participant.  Bib is also used when searching for participants.  A bib can have letters, such as F212, etc.  Bib is for display only and is not used for linking timing data to a participant.

NOTE: A participant may have more than one tag associated. Specify multiple tags using a semicolon ';' separator.

A participant may have only one 'bib', however, by using a comma separator in the bib field, each item will be individually searchable.


Best Practices https://go.rtrt.me/docs/api/profile-fields#profile-field-bestpractices

While our system does try to fill in any missing pieces, the best strategy for success is to explicitly set important fields metioned below. We also recommend letting our system build wavecodes for you (Roster->Options: Auto Wave Codes).

You'll have the most success if you always import Complete files with all participants and always provide the same set fields. Try to avoid uploading partial / incrementals and changing field headers between imports.

Categorizing Participants: https://go.rtrt.me/docs/api/profile-fields#profile-field-cats

Below are the basic fields needed for categorizing (grouping) participants.

course. A lowercase string with no spaces or punctuation (other than '_') that defines a route in the event. E.g. 'halfmarathon', '5k', or 'aquathlon_olympic'.  You must choose from our current list of courses available.  You can find the list available when choosing from the picker in the category.  If you need something different, please let us know.

Click here for a current list of available courses. '1mile', '1_2k', '1_5k', '10mile', '10_25k', '10_5k', '10_6k', '100m', '100k', '101k', '10k', '10k_w', '11mile', '11_2k', '110k', '11k', '12mile', '125k', '12k', '13mile', '13k', '14mile', '140k', '14k', '15mile', '15k', '16_5k', '16_8k', '1600m', '16k', '177k', '17k', '18mile', '18_45k', '181k', '18k', '19k', '1k', '1sthalfmarathon', '2mile', '2_5k', '20mile', '200m', '20k', '21k', '2400m', '24k', '25k', '27k', '2800m', '2k', '2ndhalfmarathon', '3mile', '3_2k', '3_3mile', '3_65k', '3_6k', '30mile', '300m', '30k', '31_5k', '32k', '33mile', '36mile', '36k', '3k', '4mile', '4_2k', '4_3k', '4_6k', '4_7k', '400m', '40k', '43k', '44k', '45mile', '4k', '5mile', '5_25k', '5_2k', '5_3k', '5_5k', '50k', '52k', '56k', '58k', '5k', '6mile', '60mile', '600m', '60k', '65k', '66mile', '6k', '7mile', '7_3k', '7_6k', '75mile', '75k', '77k', '7k', '8mile', '8_5k', '8_6k', '8_7k', '8_9k', '800m', '82mile', '85k', '87k', '8k', '9mile', '9_7k', '90mile', '90k', '9k', 'aquabike_half_iron', 'aquabike_olympic', 'aquabike_sprint', 'aquathlon_intermediate', 'aquathlon_long', 'aquathlon_olympic', 'aquathlon_short', 'aquathlon_sprint', 'aquathlon_ultra', 'aux', 'bach', 'bike', 'canol', 'champ_run', 'diversion', 'dream_run', 'duathlon_full', 'duathlon_powerman', 'duathlon_sprint', 'duathlon_sprint_legal', 'duathlon_standard', 'enduro', 'halfmarathon', 'half_of_half', 'hardline', 'ironman4184', 'ironman4184_noswim', 'ironman5150', 'ironman5150_noswim', 'ironman703', 'ironman703_noswim', 'ironman', 'ironman_noswim', 'leg1', 'leg1b', 'leg2', 'leg2b', 'leg3', 'leg3b', 'leg4', 'leg4b', 'leg5', 'leg5b', 'leg6', 'leg6b', 'mawr', 'marathon', 'metric_marathon', 'mini', 'mixed_team_relay', 'pending', 'route_1', 'route_10', 'route_11', 'route_12', 'route_13', 'route_14', 'route_15', 'route_16', 'route_17', 'route_18', 'route_19', 'route_2', 'route_20', 'route_21', 'route_22', 'route_23', 'route_24', 'route_25', 'route_26', 'route_27', 'route_28', 'route_29', 'route_3', 'route_30', 'route_31', 'route_32', 'route_33', 'route_34', 'route_35', 'route_36', 'route_37', 'route_38', 'route_39', 'route_4', 'route_40', 'route_41', 'route_42', 'route_43', 'route_44', 'route_45', 'route_46', 'route_47', 'route_48', 'route_49', 'route_5', 'route_50', 'route_51', 'route_52', 'route_53', 'route_54', 'route_55', 'route_6', 'route_7', 'route_8', 'route_9', 'route_a', 'route_b', 'route_c', 'route_d', 'route_e', 'route_f', 'route_g', 'route_h', 'route_i', 'route_j', 'route_k', 'route_l', 'route_m', 'route_n', 'route_o', 'route_p', 'route_q', 'route_r', 'route_s', 'route_t', 'route_u', 'route_v', 'route_w', 'route_x', 'route_y', 'route_z', 'run', 'senior_run', 'snowdon', 'sprint_highschool', 'sprint_legal', 'sprint_pc', 'stair', 'stair2', 'stair3', 'swim', 'tour', 'training', 'tri_elite_sprint', 'tri_full', 'tri_half_iron', 'tri_itu_sprint', 'tri_ironman', 'tri_junior', 'tri_legend', 'tri_olympic', 'tri_sprint', 'tri_super_sprint', 'ultra_marathon', and 'xtrem'

NOTE: A participant may have more than one course. See our Timer FAQ Multi-Course

sex. Every participant must have a sex of 'M', 'F', or 'U' if not specified.  You can also use 'MF' for co-ed teams. Use 'X' for Non-Binary and use 'O' for Open.

class. A lowercase string with no spaces or punctuation (other than '_') that defines a generalized type for the participant.  This value can be anything you choose.  Common examples include 'open', 'wheel', 'walk', 'cyldesdale', or 'elite'.   NOTE: There is one special class--- 'relay'.  If used, 'relay' class has the effect of disabling 'pace change' filters and also point notifications will post using the 'team' instead of participants 'name' if a team name is set.

The 3 fields above are combined to automatically create 'wavecodes'. Wavecodes are assigned to categories. See our Timer FAQ.

wavecode is a combo of [course]-[sex]-[class].  Wavecodes are used for grouping of participants, specifically, to build Categories for the purpose of managing start waves, or for grouping in Leaderboards.  Categories can include one or more 'wavecodes'.  Wavecode is for internal/API purposes only and is not displayed to the public.

NOTE: A participant may have more than one wavecode. See our Timer FAQ Multi-Course

Additionally, you will need:

race. Every participant will have a 'race' name.   The 'race' is the public facing description of the particular type of activity.   You can use any race name that you (or your race director) might dream up.  Case and punctuation are preserved.   Race names appear in tracking and, by default, are used in point notification templates.    A few examples:  '5K', 'Marathon', '10K Walk', 'Fairy Tale Challenge', 'IRONMAN® 70.3', 'Half Marathon Relay', 'Mudathlon', etc.

Having these basic fields in place is satisfactory for most events to do categorizations. However, if you wish to use RTRT for live scoring or for leaderboards with drop-downs ("smart categories”) you will need at least one addition field. The most common example is to import a 'division' that combines gender and age group into one value.

division.  Optional field that can be used for place calculations.   Commonly, this field may have values such as 'F15-20', 'M55-59', or 'M-PRO' — whatever values that you want to group participants by for scoring. NOTE:  Using 'division' is the most common field used, but the field does not have to be called 'division', e.g. some people use 'agegroup'.   However, whichever fields you choose must be configured in Timing & Scoring->Participant Places  and/or in leaderboard Category-> Subtitle as 'Smart Categories'

Misc: https://go.rtrt.me/docs/api/profile-fields#profile-field-misc

Other special fields.

pid is the RTRT internal unique participant identifier.  This is always auto-generated by our system and should not change once assigned to participant (assuming consistency of unique key in registration data).

_ver is a number that starts as 1 when a record is created and advanced each time a profile record is changed.

"i":"1307478599_000351", < system Unix timestamp & increment when inserted into the RTRT servers.  Used internally and for polling. >,

"u":"1307478599_000351", < system Unix timestamp & increment when last updated on the RTRT servers.  Used internally and for polling.  Appears only in 'agt' polling mode. >,

"a":"1307478599_000351", < system Unix timestamp & increment of the most recent between 'u' or 'i'.  Used internally and for polling.  Appears only in 'agt' polling mode. >


Import Logic:

  • NO TAG RULE: If no 'tag' field is specified, the 'tag' will be derived from the bib.
  • NO BIB RULE: If no 'bib' field is specified, the 'bib' will be derived from the tag.
  • NO COURSE RULE: If 'course' field is not specified, the 'course' for a profile is determined by searching 'division' or 'race' fields for a valid 'course'. For example, a race of "16.8km Men's Closed" will get course value of '16.8k'. Another example: A 'division' of "Half Marathon - General" would get a course of 'halfmarathon'.
  • NO RACE RULE: If 'race' field is not specified, the 'race' for a profile is determined by searching 'course' or 'division' fields, and using a common race mapping to determine a 'race' value. For example, a 'division' of "Half Marathon - General" would get a race of 'Half Marathon'. If race cannot be determined by looking at other fields, fallback to option set in Roster Options->Default Race.
  • NO CLASS RULE: If 'class' field is not specified, the 'class' for a profile is determined by searching 'division' or 'race' fields for a valid 'class'. For example, a race of "16.8km Men's Closed" will get class value of 'closed'.
  • WAVECODE: If Roster Options->Auto Wave Format is ON, we build a 'wavecode' by combining '[course]-[sex]-[class]'.