GPX Tracker API Documentation

Base URL: https://gpx.octal.be

Available Devices

Devices: moto1, moto2

/api/devices

Lists all available devices

curl -X GET "https://gpx.octal.be/api/devices"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/standing

Current race standings and device aliases

curl -X GET "https://gpx.octal.be/api/standing"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/position/moto1

Current position of moto1 (lat/lon)

curl -X GET "https://gpx.octal.be/api/position/moto1"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/status/moto1

Health/status of moto1

curl -X GET "https://gpx.octal.be/api/status/moto1"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/distance/moto1/start

Distance from start for moto1 (km)

curl -X GET "https://gpx.octal.be/api/gap/distance/moto1/start"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/distance/moto1/end

Distance to end for moto1 (km)

curl -X GET "https://gpx.octal.be/api/gap/distance/moto1/end"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/speed/moto1/mean/50

Mean speed for moto1 over 50 points (km/h)

curl -X GET "https://gpx.octal.be/api/speed/moto1/mean/50"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/speed/moto1/mean/50/text

Mean speed for moto1 — plain-text output

curl -X GET "https://gpx.octal.be/api/speed/moto1/mean/50/text"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/poi/elevation/moto1

Current elevation for moto1 (m)

curl -X GET "https://gpx.octal.be/api/poi/elevation/moto1"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/poi/slope/moto1

Current slope for moto1 (%)

curl -X GET "https://gpx.octal.be/api/poi/slope/moto1"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/position/moto2

Current position of moto2 (lat/lon)

curl -X GET "https://gpx.octal.be/api/position/moto2"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/status/moto2

Health/status of moto2

curl -X GET "https://gpx.octal.be/api/status/moto2"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/distance/moto2/start

Distance from start for moto2 (km)

curl -X GET "https://gpx.octal.be/api/gap/distance/moto2/start"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/distance/moto2/end

Distance to end for moto2 (km)

curl -X GET "https://gpx.octal.be/api/gap/distance/moto2/end"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/speed/moto2/mean/50

Mean speed for moto2 over 50 points (km/h)

curl -X GET "https://gpx.octal.be/api/speed/moto2/mean/50"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/speed/moto2/mean/50/text

Mean speed for moto2 — plain-text output

curl -X GET "https://gpx.octal.be/api/speed/moto2/mean/50/text"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/poi/elevation/moto2

Current elevation for moto2 (m)

curl -X GET "https://gpx.octal.be/api/poi/elevation/moto2"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/poi/slope/moto2

Current slope for moto2 (%)

curl -X GET "https://gpx.octal.be/api/poi/slope/moto2"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/time/moto1/moto2

Time gap moto1↔moto2 — seconds (default)

curl -X GET "https://gpx.octal.be/api/gap/time/moto1/moto2"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/time/moto1/moto2/mmss

Time gap — mm:ss format

curl -X GET "https://gpx.octal.be/api/gap/time/moto1/moto2/mmss"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/time/moto1/moto2/hhmmss

Time gap — hh:mm:ss format

curl -X GET "https://gpx.octal.be/api/gap/time/moto1/moto2/hhmmss"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/time/moto1/moto2/racing

Time gap — racing format (mm'ss'')

curl -X GET "https://gpx.octal.be/api/gap/time/moto1/moto2/racing"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/time/moto1/moto2/racing/text

Time gap — racing, plain-text output

curl -X GET "https://gpx.octal.be/api/gap/time/moto1/moto2/racing/text"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/time/moto1/moto2/hhmmss/html

Time gap — hh:mm:ss, HTML output

curl -X GET "https://gpx.octal.be/api/gap/time/moto1/moto2/hhmmss/html"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/distance/moto1/moto2

Distance gap moto1↔moto2 (km, JSON)

curl -X GET "https://gpx.octal.be/api/gap/distance/moto1/moto2"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/distance/moto1/moto2/text

Distance gap — plain-text output

curl -X GET "https://gpx.octal.be/api/gap/distance/moto1/moto2/text"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/time/first/second/racing

Time gap leader↔2nd (racing) — via aliases

curl -X GET "https://gpx.octal.be/api/gap/time/first/second/racing"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

/api/gap/distance/first/last

Distance gap leader↔last — via aliases

curl -X GET "https://gpx.octal.be/api/gap/distance/first/last"

Live Response:

❌ ERROR: Request failed: {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}

Data refreshes every 5 seconds. Last update: 2026-07-03T04:37:26.477063Z