*/times, reads and raw data
API with passings or detections (raw data timestamps) at virtual checkpoints respectively geofences, similar to a reader
  • Effortless detections with virtual timekeeping points (geofence) and with geolocations of participants. No timing hardware, no transponders.
  • Passings are recorded in a radius around the geofence. Set the radius in the setting of the data API of your event.
  • Flexibly adjust settings in between: add timekeeping points or change their locations of a running event or even of a past event, recalculate detections with new parameters.

Request

URL https://racemap.com/api/data/v1/:eventId/times Method GET

Optional query with id of a checkpoint

Response

Event object

Field
Description [unit]
Sample
name
Name of event
"Sample live | 100km Duathlon"
location
Location
"🇩🇪 Dresden"
startTime
Start time in UTC
"2022-03-09T07:00:03.201Z"
endTime
End time in UTC
"2022-03-09T14:59:38.201Z"
timekeepings
Array for checkpoint objects
starters
Array for participant objects

Checkpoint object

Field
Description
Sample
name
Name of virtual timekeeping point
"Split 5"
offset
Distance [m] along the shadowtrack
49222.81
id
Unique Racemap ID of timekeeping point
"_d15macicg"
position
Array with longitude, latitude, hight [m]
13.881129999, 51.075250000, 250

Participant object

Field
Description [unit]
Sample
id
Unique Racemap ID of participant
"61a2122f181c0a6c4bb5376e"
importId
User-defined ID with imported participant data, Generic API (importId) or RACE|RESULT API (Id)
"UniqueImportId_2" or "null" if no importId exists
startNumber
Bib number
"2"
name
Name
"CLV Megware"
times
Object for checkpoint arrays
null if no locations within startTime and endTime {} if there are locations but no detections

Checkpoint array

Description
Sample
Unique Racemap ID of timekeeping point, array for detection objects
_2hmv4wcsb

Detection object

Field
Description [unit]
Sample
time
Timestamp of detection in UTC
"2022-03-09T10:08:00.000Z"
distanceToSplit
Distance [m] of detection from timekeeping point
43.96

Sample response

1
{
2
"name": "Sample Event | 100km-Duathlon",
3
"location": "🇩🇪 Dresden",
4
"startTime": "2020-04-25T06:00:00.000Z",
5
"endTime": "2020-10-30T18:15:00.000Z",
6
"timekeepings": [
7
{
8
"name": "Start",
9
"offset": 0,
10
"id": "_t9kp7roge",
11
"position": [13.704099056608415, 51.02740202001082, 161]
12
},
13
{
14
"name": "Ruppendorf",
15
"offset": 29537.54,
16
"id": "_l7z9ygc3f",
17
"position": [13.599722542890463, 50.90910508578093, 377]
18
},
19
{
20
"name": "🕖",
21
"offset": 48150.06,
22
"id": "_xdbst6t0c",
23
"position": [13.633563734472718, 50.77911506210913, 570]
24
},
25
{
26
"name": "Bergwertung",
27
"offset": 49975.36,
28
"id": "_b31s55hd3",
29
"position": [13.623273503927214, 50.76995405256768, 743]
30
},
31
{
32
"name": "🕖",
33
"offset": 67682.87,
34
"id": "_a218n2064",
35
"position": [13.69125, 50.82612, 471]
36
},
37
{
38
"name": "Bergwertung",
39
"offset": 68805.8,
40
"id": "_l542jdzag",
41
"position": [13.697525647974043, 50.83382486871975, 603]
42
},
43
{
44
"name": "Finish",
45
"offset": 100314.54,
46
"id": "_muwe600tp",
47
"position": [13.704065646340139, 51.0271269953974, 164]
48
}
49
],
50
"starters": [
51
{
52
"id": "60a3b6791474227ee54a5bdf",
53
"importId": "UniqueImportId_1",
54
"startNumber": "01",
55
"name": "Konrad",
56
"times": null
57
},
58
{
59
"id": "60a3b679147422b72a4a5be0",
60
"importId": "UniqueImportId_2",
61
"startNumber": "02",
62
"name": "Jörg",
63
"times": {
64
"_t9kp7roge": [
65
{
66
"time": "2020-04-26T14:52:45.000Z",
67
"distanceToSplit": 11.46
68
},
69
{
70
"time": "2020-04-26T14:52:50.000Z",
71
"distanceToSplit": 12.61
72
},
73
{
74
"time": "2020-04-26T14:52:55.000Z",
75
"distanceToSplit": 22.52
76
},
77
{
78
"time": "2020-04-26T14:53:00.000Z",
79
"distanceToSplit": 38.67
80
}
81
],
82
"_l7z9ygc3f": [
83
{
84
"time": "2020-04-26T10:19:45.000Z",
85
"distanceToSplit": 20.36
86
},
87
{
88
"time": "2020-04-26T10:19:50.000Z",
89
"distanceToSplit": 26.4
90
}
91
],
92
"_xdbst6t0c": [
93
{
94
"time": "2020-04-26T11:30:35.000Z",
95
"distanceToSplit": 44.03
96
},
97
{
98
"time": "2020-04-26T11:30:40.000Z",
99
"distanceToSplit": 14.17
100
},
101
{
102
"time": "2020-04-26T11:30:45.000Z",
103
"distanceToSplit": 15.18
104
},
105
{
106
"time": "2020-04-26T11:30:50.000Z",
107
"distanceToSplit": 40.98
108
}
109
],
110
"_b31s55hd3": [
111
{
112
"time": "2020-04-26T11:41:00.000Z",
113
"distanceToSplit": 39.18
114
},
115
{
116
"time": "2020-04-26T11:41:05.000Z",
117
"distanceToSplit": 19.22
118
},
119
{
120
"time": "2020-04-26T11:41:10.000Z",
121
"distanceToSplit": 4.46
122
},
123
{
124
"time": "2020-04-26T11:41:15.000Z",
125
"distanceToSplit": 32.33
126
}
127
],
128
"_a218n2064": [
129
{
130
"time": "2020-04-26T13:00:20.000Z",
131
"distanceToSplit": 47.27
132
},
133
{
134
"time": "2020-04-26T13:00:25.000Z",
135
"distanceToSplit": 31.78
136
},
137
{
138
"time": "2020-04-26T13:00:30.000Z",
139
"distanceToSplit": 16.19
140
},
141
{
142
"time": "2020-04-26T13:00:35.000Z",
143
"distanceToSplit": 8.29
144
},
145
{
146
"time": "2020-04-26T13:00:40.000Z",
147
"distanceToSplit": 17.85
148
},
149
{
150
"time": "2020-04-26T13:00:45.000Z",
151
"distanceToSplit": 27.8
152
},
153
{
154
"time": "2020-04-26T13:00:50.000Z",
155
"distanceToSplit": 40.04
156
}
157
],
158
"_l542jdzag": [
159
{
160
"time": "2020-04-26T13:08:35.000Z",
161
"distanceToSplit": 40.64
162
},
163
{
164
"time": "2020-04-26T13:08:40.000Z",
165
"distanceToSplit": 26.12
166
},
167
{
168
"time": "2020-04-26T13:08:45.000Z",
169
"distanceToSplit": 12.82
170
},
171
{
172
"time": "2020-04-26T13:08:50.000Z",
173
"distanceToSplit": 4.25
174
},
175
{
176
"time": "2020-04-26T13:08:55.000Z",
177
"distanceToSplit": 15.45
178
},
179
{
180
"time": "2020-04-26T13:09:00.000Z",
181
"distanceToSplit": 30.58
182
},
183
{
184
"time": "2020-04-26T13:09:05.000Z",
185
"distanceToSplit": 46.71
186
}
187
],
188
"_muwe600tp": [
189
{
190
"time": "2020-04-26T08:20:25.000Z",
191
"distanceToSplit": 46.54
192
},
193
{
194
"time": "2020-04-26T08:20:30.000Z",
195
"distanceToSplit": 39.3
196
},
197
{
198
"time": "2020-04-26T14:50:35.000Z",
199
"distanceToSplit": 26.75
200
},
201
{
202
"time": "2020-04-26T14:50:40.000Z",
203
"distanceToSplit": 4.86
204
},
205
{
206
"time": "2020-04-26T14:50:45.000Z",
207
"distanceToSplit": 19.61
208
},
209
{
210
"time": "2020-04-26T14:52:45.000Z",
211
"distanceToSplit": 26.33
212
},
213
{
214
"time": "2020-04-26T14:52:55.000Z",
215
"distanceToSplit": 32.5
216
},
217
{
218
"time": "2020-04-26T14:53:00.000Z",
219
"distanceToSplit": 46.08
220
}
221
]
222
}
223
}
224
]
225
}
Copied!

Sample response with id of checkpoint

Times array with detection objects

Field
Description [unit]
Sample
id
Unique Racemap ID of participant
"60a3b679147422b72a4a5be0"
importId
User-defined ID with imported participant data, Generic API (importId) or RACE|RESULT API (Id)
"UniqueImportId_2"
startNumber
Bib number
"02"
name
Name
"Jörg"
time
Timestamp of detection in UTC
"2022-03-09T10:08:00.000Z"
distanceToSplit
Distance [m] of detection from timekeeping point
16.19
1
{
2
"name": "Sample | 100km Duathlon",
3
"location": "🇩🇪 Dresden",
4
"startTime": "2020-04-25T06:00:00.000Z",
5
"endTime": "2020-10-30T18:15:00.000Z",
6
"timekeepingId": "_b31s55hd3",
7
"timekeepingName": "Bergwertung",
8
"times": [
9
{
10
"id": "60a3b679147422b72a4a5be0",
11
"importId": "UniqueImportId_2",
12
"startNumber": "02",
13
"name": "Jörg",
14
"time": "2020-04-26T11:41:00.000Z",
15
"distanceToSplit": 39.18
16
},
17
{
18
"id": "60a3b679147422b72a4a5be0",
19
"importId": "UniqueImportId_2",
20
"startNumber": "02",
21
"name": "Jörg",
22
"time": "2020-04-26T11:41:05.000Z",
23
"distanceToSplit": 19.22
24
},
25
{
26
"id": "60a3b679147422b72a4a5be0",
27
"importId": "UniqueImportId_2",
28
"startNumber": "02",
29
"name": "Jörg",
30
"time": "2020-04-26T11:41:10.000Z",
31
"distanceToSplit": 4.46
32
},
33
{
34
"id": "60a3b679147422b72a4a5be0",
35
"importId": "UniqueImportId_2",
36
"startNumber": "02",
37
"name": "Jörg",
38
"time": "2020-04-26T11:41:15.000Z",
39
"distanceToSplit": 32.33
40
},
41
{
42
"id": "60a3b67914742230ef4a5be2",
43
"importId": "UniqueImportId_3",
44
"startNumber": "03",
45
"name": "Leupold",
46
"time": "2020-05-01T10:34:45.000Z",
47
"distanceToSplit": 52.28
48
},
49
{
50
"id": "60a3b67914742230ef4a5be2",
51
"importId": "UniqueImportId_3",
52
"startNumber": "03",
53
"name": "Leupold",
54
"time": "2020-05-01T10:34:50.000Z",
55
"distanceToSplit": 27.7
56
},
57
{
58
"id": "60a3b67914742230ef4a5be2",
59
"importId": "UniqueImportId_3",
60
"startNumber": "03",
61
"name": "Leupold",
62
"time": "2020-05-01T10:34:55.000Z",
63
"distanceToSplit": 1.95
64
},
65
{
66
"id": "60a3b67914742230ef4a5be2",
67
"importId": "UniqueImportId_3",
68
"startNumber": "03",
69
"name": "Leupold",
70
"time": "2020-05-01T10:35:00.000Z",
71
"distanceToSplit": 31.06
72
},
73
{
74
"id": "60a3b67914742223014a5bea",
75
"importId": "UniqueImportId_11",
76
"startNumber": "11",
77
"name": "Michi",
78
"time": "2020-05-02T09:26:30.000Z",
79
"distanceToSplit": 50.33
80
},
81
{
82
"id": "60a3b679147422101b4a5be3",
83
"importId": "UniqueImportId_4",
84
"startNumber": "04",
85
"name": " KRad",
86
"time": "2020-05-02T09:26:35.000Z",
87
"distanceToSplit": 52.28
88
},
89
{
90
"id": "60a3b67914742223014a5bea",
91
"importId": "UniqueImportId_11",
92
"startNumber": "11",
93
"name": "Michi",
94
"time": "2020-05-02T09:26:40.000Z",
95
"distanceToSplit": 2.83
96
},
97
{
98
"id": "60a3b679147422101b4a5be3",
99
"importId": "UniqueImportId_4",
100
"startNumber": "04",
101
"name": " KRad",
102
"time": "2020-05-02T09:26:45.000Z",
103
"distanceToSplit": 2.92
104
},
105
{
106
"id": "60a3b679147422101b4a5be3",
107
"importId": "UniqueImportId_4",
108
"startNumber": "04",
109
"name": " KRad",
110
"time": "2020-05-02T09:26:50.000Z",
111
"distanceToSplit": 47.5
112
},
113
{
114
"id": "60a3b67914742207e84a5be7",
115
"importId": "UniqueImportId_8",
116
"startNumber": "08",
117
"name": " Richi",
118
"time": "2020-05-02T09:29:00.000Z",
119
"distanceToSplit": 9.65
120
},
121
{
122
"id": "60a3b679147422b9ba4a5beb",
123
"importId": "UniqueImportId_12",
124
"startNumber": "12",
125
"name": "Christoph",
126
"time": "2020-05-02T09:46:10.000Z",
127
"distanceToSplit": 22.24
128
},
129
{
130
"id": "60a3b67914742200964a5be8",
131
"importId": "UniqueImportId_9",
132
"startNumber": "09",
133
"name": "Jens",
134
"time": "2020-05-02T09:46:20.000Z",
135
"distanceToSplit": 23.42
136
},
137
{
138
"id": "60a3b679147422b9ba4a5beb",
139
"importId": "UniqueImportId_12",
140
"startNumber": "12",
141
"name": "Christoph",
142
"time": "2020-05-02T09:46:20.000Z",
143
"distanceToSplit": 32.36
144
},
145
{
146
"id": "60a3b67914742200964a5be8",
147
"importId": "UniqueImportId_9",
148
"startNumber": "09",
149
"name": "Jens",
150
"time": "2020-05-02T09:46:30.000Z",
151
"distanceToSplit": 25.51
152
},
153
{
154
"id": "60a3b679147422151c4a5be9",
155
"importId": "UniqueImportId_10",
156
"startNumber": "10",
157
"name": "Martin",
158
"time": "2020-05-02T09:46:50.000Z",
159
"distanceToSplit": 40.8
160
},
161
{
162
"id": "60a3b679147422151c4a5be9",
163
"importId": "UniqueImportId_10",
164
"startNumber": "10",
165
"name": "Martin",
166
"time": "2020-05-02T09:47:00.000Z",
167
"distanceToSplit": 5.78
168
},
169
{
170
"id": "60a3b679147422d55d4a5be4",
171
"importId": "UniqueImportId_5",
172
"startNumber": "05",
173
"name": "Basti",
174
"time": "2020-05-02T11:33:25.000Z",
175
"distanceToSplit": 36.56
176
},
177
{
178
"id": "60a3b679147422d55d4a5be4",
179
"importId": "UniqueImportId_5",
180
"startNumber": "05",
181
"name": "Basti",
182
"time": "2020-05-02T11:33:30.000Z",
183
"distanceToSplit": 13.6
184
},
185
{
186
"id": "60a3b679147422a4814a5be5",
187
"importId": "UniqueImportId_6",
188
"startNumber": "06",
189
"name": "Diddi Knoppers",
190
"time": "2020-05-02T12:47:25.000Z",
191
"distanceToSplit": 29.33
192
},
193
null
194
]
195
}
Copied!

Export to RACE|RESULT

RACE|RESULT event settings: Main Window, Simple API
  • Type: Custom
  • Details: rawdata/addmanual
Settings create an API key to push external data to RACE|RESULT. The duration of the key is limited. Sample: https://api.raceresult.com/180472/G5XQYZKPIPU5J1RSCVIZ48QKVU5JIIJP
Data from Racemap */times API need be transferred to RACE|RESULT API format, e.g. with a python script:
Using this format virtual detections are imported in RACE|RESULT one by one.