*/times, reads and raw data

API with passings or detections (raw data timestamps) at virtual checkpoints respectively geofences, similar to a reader

The */times API generates a detection from a received location if it fulfills three conditions. The API can provide multiple detections for a split.

  • The device id belongs to the event.

  • The location is around the detection radius of a geofence.

  • The timestamp of the location is between the event start- and end time.

  • 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

Live sample https://racemap.com/api/data/v1/61a21210e5d45d000199f7d9/times Past sample https://racemap.com/api/data/v1/60a3b443f096f800018add7c/times

Optional query with id of a checkpoint

Response

Event object

Checkpoint object

Participant object

Checkpoint array

Detection object

Sample response

{
  "name": "Sample | 100km Duathlon",
  "location": "🇩🇪 Dresden",
  "startTime": "2020-04-25T06:00:00Z",
  "endTime": "2020-10-30T18:15:00Z",
  "timekeepings": [
    {
      "name": "Start",
      "offset": 0,
      "position": [13.704069467101244, 51.027617808548015, 159],
      "id": "64513872c3ab09659eb09674"
    },
    {
      "name": "Ruppendorf",
      "offset": 29510,
      "position": [13.599722542890463, 50.90910508578093, 377],
      "id": "64513873368d2f24f3a5feb9"
    },
    {
      "name": "🕖",
      "offset": 48130,
      "position": [13.633563734472718, 50.77911506210913, 570],
      "id": "64513873a2c6e28dbe010405"
    },
    {
      "name": "Bergwertung",
      "offset": 49950,
      "position": [13.623273503927214, 50.76995405256768, 743],
      "id": "64513874c3ab09659eb096b5"
    },
    {
      "name": "🕖",
      "offset": 67660,
      "position": [13.69125, 50.82612, 471],
      "id": "645138746451816d07b38788"
    },
    {
      "name": "Bergwertung",
      "offset": 68780,
      "position": [13.697525647974045, 50.83382486871975, 603],
      "id": "6451387410e583b28d7167e6"
    },
    {
      "name": "Finish",
      "offset": 100260,
      "position": [13.704038205094022, 51.02687962934201, 166],
      "id": "64513872c3ab09659eb09683"
    }
  ],
  "starters": [
    {
      "id": "60a3b6791474227ee54a5bdf",
      "importId": "UniqueImportId_1",
      "startNumber": "01",
      "name": "Konrad",
      "times": null
    },
    {
      "id": "60a3b679147422b72a4a5be0",
      "importId": "UniqueImportId_2",
      "startNumber": "02",
      "name": "Jörg",
      "times": {
        "64513872c3ab09659eb09674": [
          {
            "time": "2020-04-26T08:23:55Z",
            "distanceToSplit": 16.81
          },
          {
            "time": "2020-04-26T08:24:00Z",
            "distanceToSplit": 8.92
          }
        ],
        "64513873368d2f24f3a5feb9": [
          {
            "time": "2020-04-26T10:19:45Z",
            "distanceToSplit": 20.36
          },
          {
            "time": "2020-04-26T10:19:50Z",
            "distanceToSplit": 26.4
          }
        ],
        "64513873a2c6e28dbe010405": [
          {
            "time": "2020-04-26T11:30:40Z",
            "distanceToSplit": 14.17
          },
          {
            "time": "2020-04-26T11:30:45Z",
            "distanceToSplit": 15.18
          }
        ],
        "64513874c3ab09659eb096b5": [
          {
            "time": "2020-04-26T11:41:05Z",
            "distanceToSplit": 19.22
          },
          {
            "time": "2020-04-26T11:41:10Z",
            "distanceToSplit": 4.46
          }
        ],
        "645138746451816d07b38788": [
          {
            "time": "2020-04-26T13:00:30Z",
            "distanceToSplit": 16.19
          },
          {
            "time": "2020-04-26T13:00:35Z",
            "distanceToSplit": 8.29
          },
          {
            "time": "2020-04-26T13:00:40Z",
            "distanceToSplit": 17.85
          },
          {
            "time": "2020-04-26T13:00:45Z",
            "distanceToSplit": 27.8
          }
        ],
        "6451387410e583b28d7167e6": [
          {
            "time": "2020-04-26T13:08:40Z",
            "distanceToSplit": 26.12
          },
          {
            "time": "2020-04-26T13:08:45Z",
            "distanceToSplit": 12.82
          },
          {
            "time": "2020-04-26T13:08:50Z",
            "distanceToSplit": 4.25
          },
          {
            "time": "2020-04-26T13:08:55Z",
            "distanceToSplit": 15.45
          }
        ],
        "64513872c3ab09659eb09683": [
          {
            "time": "2020-04-26T14:50:30Z",
            "distanceToSplit": 28.16
          },
          {
            "time": "2020-04-26T14:50:35Z",
            "distanceToSplit": 2.91
          }
        ]
      }
    },
    {
      "id": "60a3b67914742230ef4a5be2",
      "importId": "UniqueImportId_3",
      "startNumber": "03",
      "name": "Leupold",
      "times": {
        "64513872c3ab09659eb09674": [
          {
            "time": "2020-05-01T07:49:45Z",
            "distanceToSplit": 13.06
          },
          {
            "time": "2020-05-01T07:49:50Z",
            "distanceToSplit": 10.56
          },
          {
            "time": "2020-05-01T13:06:25Z",
            "distanceToSplit": 19.77
          },
          {
            "time": "2020-05-01T13:06:30Z",
            "distanceToSplit": 17.84
          }
        ],
        "64513873368d2f24f3a5feb9": [
          {
            "time": "2020-05-01T09:26:45Z",
            "distanceToSplit": 1.69
          }
        ],
        "64513873a2c6e28dbe010405": [
          {
            "time": "2020-05-01T10:24:35Z",
            "distanceToSplit": 12.15
          },
          {
            "time": "2020-05-01T10:24:40Z",
            "distanceToSplit": 22.72
          }
        ],
        "64513874c3ab09659eb096b5": [
          {
            "time": "2020-05-01T10:34:50Z",
            "distanceToSplit": 27.7
          },
          {
            "time": "2020-05-01T10:34:55Z",
            "distanceToSplit": 1.95
          }
        ],
        "645138746451816d07b38788": [
          {
            "time": "2020-05-01T11:24:30Z",
            "distanceToSplit": 18.56
          },
          {
            "time": "2020-05-01T11:24:35Z",
            "distanceToSplit": 10.39
          },
          {
            "time": "2020-05-01T11:24:40Z",
            "distanceToSplit": 22.24
          }
        ],
        "6451387410e583b28d7167e6": [
          {
            "time": "2020-05-01T11:31:30Z",
            "distanceToSplit": 29.7
          },
          {
            "time": "2020-05-01T11:31:35Z",
            "distanceToSplit": 10.6
          },
          {
            "time": "2020-05-01T11:31:40Z",
            "distanceToSplit": 5.61
          },
          {
            "time": "2020-05-01T11:31:45Z",
            "distanceToSplit": 22.52
          }
        ],
        "64513872c3ab09659eb09683": [
          {
            "time": "2020-05-01T13:06:15Z",
            "distanceToSplit": 11.25
          },
          {
            "time": "2020-05-01T13:06:20Z",
            "distanceToSplit": 25.62
          }
        ]
      }
    }
  ]
}

Sample response with id of checkpoint

Checkpoint "Bergwertung" https://racemap.com/api/data/v1/60a3b443f096f800018add7c/times/6451387410e583b28d7167e6

Times array with detection objects

{
  "name": "Sample | 100km Duathlon",
  "location": "🇩🇪 Dresden",
  "startTime": "2020-04-25T06:00:00Z",
  "endTime": "2020-10-30T18:15:00Z",
  "timekeepingId": "6451387410e583b28d7167e6",
  "timekeepingName": "Bergwertung",
  "times": [
    {},
    {
      "id": "60a3b679147422b72a4a5be0",
      "importId": "UniqueImportId_2",
      "startNumber": "02",
      "name": "Jörg",
      "time": "2020-04-26T13:08:45Z",
      "distanceToSplit": 12.82
    },
    {
      "id": "60a3b679147422b72a4a5be0",
      "importId": "UniqueImportId_2",
      "startNumber": "02",
      "name": "Jörg",
      "time": "2020-04-26T13:08:50Z",
      "distanceToSplit": 4.25
    },
    {
      "id": "60a3b679147422b72a4a5be0",
      "importId": "UniqueImportId_2",
      "startNumber": "02",
      "name": "Jörg",
      "time": "2020-04-26T13:08:55Z",
      "distanceToSplit": 15.45
    },
    {
      "id": "60a3b67914742230ef4a5be2",
      "importId": "UniqueImportId_3",
      "startNumber": "03",
      "name": "Leupold",
      "time": "2020-05-01T11:31:30Z",
      "distanceToSplit": 29.7
    },
    {
      "id": "60a3b67914742230ef4a5be2",
      "importId": "UniqueImportId_3",
      "startNumber": "03",
      "name": "Leupold",
      "time": "2020-05-01T11:31:35Z",
      "distanceToSplit": 10.6
    },
    {
      "id": "60a3b67914742230ef4a5be2",
      "importId": "UniqueImportId_3",
      "startNumber": "03",
      "name": "Leupold",
      "time": "2020-05-01T11:31:40Z",
      "distanceToSplit": 5.61
    },
    {
      "id": "60a3b67914742230ef4a5be2",
      "importId": "UniqueImportId_3",
      "startNumber": "03",
      "name": "Leupold",
      "time": "2020-05-01T11:31:45Z",
      "distanceToSplit": 22.52
    },
    {
      "id": "60a3b679147422101b4a5be3",
      "importId": "UniqueImportId_4",
      "startNumber": "04",
      "name": " KRad",
      "time": "2020-05-02T10:41:35Z",
      "distanceToSplit": 17.72
    },
    {
      "id": "60a3b679147422101b4a5be3",
      "importId": "UniqueImportId_4",
      "startNumber": "04",
      "name": " KRad",
      "time": "2020-05-02T10:41:40Z",
      "distanceToSplit": 7.18
    },
    {
      "id": "60a3b679147422101b4a5be3",
      "importId": "UniqueImportId_4",
      "startNumber": "04",
      "name": " KRad",
      "time": "2020-05-02T10:41:45Z",
      "distanceToSplit": 11.5
    },
    {
      "id": "60a3b679147422101b4a5be3",
      "importId": "UniqueImportId_4",
      "startNumber": "04",
      "name": " KRad",
      "time": "2020-05-02T10:41:50Z",
      "distanceToSplit": 29.53
    }
  ]
}

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.

Last updated

Logo

Maps: ©Mapbox ©OpenStreetMap ©Racemap