Skip to main content

OFeed API

OFeed offers two types of APIs—REST and GraphQL—that enable customized integration. You can find inspiration in the examples.

REST API

The Swagger documentation with detailed endpoints is available 👉.

Authorization

The authorization method uses a basic eventId:eventPassword encoded as a Base64 string, as shown in the PUT and POST request headers.

Import Data

  • Endpoint: https://api.orienteerfeed.com/rest/v1/upload/iof
  • This can be called regularly (e.g., every 5 minutes), but the complete data must be managed and new or updated records identified. This approach is not optimal—it works the same way as updating start lists or results from XML.

Update Data

The update is separated into two groups:

  • 1. Change Status

    • A simple endpoint designed specifically for handling a competitor's status
    • URL: https://api.orienteerfeed.com/rest/v1/events/{eventId}/competitors/{competitorId}/status-change
  • 2. Change Competitor's Details

    • Updates other competitor data, e.g., a new card number
    • URL: https://api.orienteerfeed.com/rest/v1/events/{eventId}/competitors/{competitorId}

Get a List of Changes

You can retrieve a list of changes for a specified origin (e.g., START). This is an authorized endpoint. URL: https://api.orienteerfeed.com/rest/v1/events/{eventId}/changelog

Example Requests

Data Upload

curl --location 'https://api.orienteerfeed.com/rest/v1/upload/iof' \
--header 'Authorization: ••••••' \
--form 'eventId="cmg4t3f0i0007my3m5hh50wl2"' \
--form 'file=@"/D:/ofeed/data/results-iof30.xml"'

Competitor Management

List of Competitors
curl --location 'http://localhost:3001/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors'
Add a New Competitor
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"classId": 2345,
"origin": "START",
"firstname": "Martin",
"lastname": "Křivda",
"card": 887640,
"registration":"CHC9403",
"organisation": "KOB Choceň",
"note":"OFeed CEO"
}'
Competitor Detail
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/4100'
Competitor Detail by External ID
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/31/external-id'
Update Competitor Data
curl --location --request PUT 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/4071' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"origin":"START",
"card": 8086810,
"note": "Another card, again!"
}'
Update Competitor Data by External ID

Usually the internal identifier of the organizing software.

curl --location --request PUT 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/RCZ1051/external-id' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"useExternalId": true,
"origin": "START",
"note": "New note",
"card":887640
}'
Delete a Competitor
curl --location --request DELETE 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/28' \
--header 'Authorization: ••••••'
Delete a Competitor by External ID
curl --location --request DELETE 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/16/external-id' \
--header 'Authorization: ••••••'
Bulk Delete All Competitors
curl --location --request DELETE 'http://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors' \
--header 'Authorization: ••••••'
Change Status
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/1/status-change' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"origin": "START",
"status": "Active"
}'

Get Changes

curl --location --globoff 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/changelog?group=true&classId={{classId}}}&origin=START' \
--header 'Authorization: ••••••'

Events

Event Detail
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2'

GraphQL

The same operations available in REST are also available in GraphQL. The advantage is that you can specify exactly which data you need in the response, reducing the size of the data transferred.

Url: GraphQL

Examples

  • QuickEvent (C++) - service

  • SI-Droid Connector (Java) - upload

  • Radio-O-Manager (Kotlin) - worker