Race Management App
Build custom tools for race committees using the Rhumby API
Race Management Integration
Use the Rhumby API to build custom scoring tools, mobile finish line apps, or integrate with existing race management software.
Mobile Finish Line Entry
Race committees can submit results from the finish boat using a simple mobile app or web form.
Recording finishes
const RHUMBY_KEY = process.env.RHUMBY_API_KEY; // needs 'results' scope
const BASE = 'https://rhumby.com/api/v1';
async function submitResults(eventSlug, raceId, finishes) {
const res = await fetch(
`${BASE}/events/${eventSlug}/races/${raceId}/results`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${RHUMBY_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
results: finishes.map((f, i) => ({
registrationId: f.registrationId,
finishPosition: i + 1,
elapsedTime: f.elapsedSeconds,
correctedTime: f.correctedSeconds,
})),
}),
}
);
if (!res.ok) {
const err = await res.json();
throw new Error(err.error);
}
return res.json();
}Recording penalties
// Mark a boat as DSQ
const results = [{
registrationId: 'reg_abc123',
finishPosition: null,
penalty: 'DSQ',
notes: 'Rule 18.2 - failed to give mark room',
}];
await submitResults('friday-night-spring-2026', 'race_456', results);Workflow: finish line to published results
- During the race — RC records finish times on their device
- After the race — RC reviews and submits via
POST /results - Scoring — Rhumby applies the fleet's scoring system automatically
- Publish — Results appear on the website and trigger webhooks
- Embeds update — Any club website widgets refresh automatically
Fetching registrations for a race
Before entering results, you need the list of registered boats:
curl -H "Authorization: Bearer rhb_your_key" \
"https://rhumby.com/api/v1/events/friday-night-spring-2026?include=registrations"This returns all registrations with boat names, sail numbers, and fleet assignments — everything the RC needs to match boats to finish positions.
Integration with existing software
If your club uses Yacht Scoring, SailBot, or another tool, you can sync data:
Export from Rhumby
// Pull all results for an event
const response = await fetch(
`${BASE}/events/${slug}/results`,
{ headers: { 'Authorization': `Bearer ${RHUMBY_KEY}` } }
);
const { data } = await response.json();
// Convert to CSV for import into other tools
const csv = data.races.flatMap(race =>
race.results.map(r =>
`${race.raceNumber},${r.sailor},${r.sailNumber},${r.finishPosition},${r.correctedTime},${r.penalty || ''}`
)
);Import into Rhumby
Use the results POST endpoint to push data from other systems into Rhumby. This lets clubs transition gradually — keep using their existing tools while getting Rhumby's embeds and API.