Skip to main content

Bodybuilding Data API

Query the bodybuilding database through a free REST API. Retrieve athlete profiles, competition results, Mr. Olympia and Arnold Classic history, IFBB Pro division data, GOAT rankings, and more.

The API returns JSON and follows standard REST conventions. All endpoints use GET requests and every one of them needs a credential. Server-side clients send an API key in the X-API-Key header; requests without one are refused with a 401. Keyed requests are rate-limited at 600 per minute.

110,616 athletes
351,066 results
6,782 contests
14 division types
Start here

Try one safe request first

Copy this request before reading the full endpoint catalog. It returns the first matching Ronnie Coleman record and proves your HTTP client, base URL, and JSON parsing are working.

  • An API key is required. Send it in the X-API-Key header; keyed clients get 600 requests per minute.
  • Expected response: a paginated object with data, total, page, per_page, and pages; each athlete uses canonical_name and primary_division.
  • Common mistake: do not append a second `/wp-json/` if your client already uses the full Base URL below.
curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/athletes?search=Ronnie%20Coleman&per_page=1"

Base URL

https://fitnessvolt.com/wp-json/bodybuilding/v1

Authentication

Every endpoint requires a credential. Send your API key in the X-API-Key request header. Keys are never accepted in a query string, because a key in a URL ends up in access logs, referrers and browser history.

A request without a credential returns HTTP 401. If you need a key, get in touch and tell us what you are building.

Rate Limiting

Enforced per key: 600 requests per minute. Exceeding the limit returns HTTP 429 with a Retry-After header. Cache responses and stay within the limit rather than retrying tightly.

Cross-Origin Requests

The API is for server-side clients. Calling it from a browser on another origin would mean putting your key in page source, where anyone can read it, so keyed requests are made from your server and never from the page.

To put our data on your site, use the embeddable widgets instead. Each one carries its own short-lived credential, scoped to the single athlete, contest or list it displays, and it is issued fresh every time the widget loads. Nothing to copy, nothing to leak.

GET

Machine-Readable Specification

/openapi

The OpenAPI 3.0 specification is available as JSON for client generators, API explorers, and validation tools.

Specification URL

"https://fitnessvolt.com/wp-json/bodybuilding/v1/openapi"
MCP

MCP Server for AI Assistants

A Model Context Protocol (MCP) server lets AI assistants and agents query this database directly as tools.

It is a thin adapter over the public REST API above, so there is no separate data path, and its tool definitions are generated from the OpenAPI specification, so they always match the live endpoints.

The source ships with the plugin under bodybuilding/mcp/ (plain Node, no build step).

Run it (Node 18+)

cd bodybuilding/mcp && npm install && BB_API_BASE="https://fitnessvolt.com/wp-json/bodybuilding/v1" node index.js

The bundled adapter currently makes anonymous API requests. Use the REST API directly for keyed requests. To register the server with a desktop AI client, add an entry like this to its MCP configuration:

claude_desktop_config.json

{
  "mcpServers": {
    "bodybuilding-database": {
      "command": "node",
      "args": ["/absolute/path/to/bodybuilding/mcp/index.js"],
      "env": { "BB_API_BASE": "https://fitnessvolt.com/wp-json/bodybuilding/v1" }
    }
  }
}

The server exposes tools for search, athletes, contests, divisions, rankings, GOAT, head-to-head compare, on this day, records, and Mr. Olympia. Every response carries the same attribution requirement described below.

GET

Complete Endpoint Catalog

This catalog is generated from the registered WordPress REST routes in the bodybuilding/v1 namespace. It lists public read endpoints only.

GET

Arnold

/arnold

Retrieve arnold data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
year integer optional Year (default: 0)
division string optional Division (default: )
GET

Arnold Year

/arnold/{year}

Retrieve arnold year data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
year integer required Year
division string optional Division (default: )
GET

Athletes

/athletes

Retrieve athletes data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
search string optional Search (default: )
division string optional Division (default: )
country string optional Country (default: )
gender string optional Gender (default: )
active string optional Active (default: )
sort string optional Sort (default: )
order string optional Order (default: )
per_page integer optional Per Page (default: 20)
page integer optional Page (default: 1)
GET

Athlete

/athletes/{id}

Retrieve athlete data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
id string required Id
GET

Athlete Career Arc

/athletes/{id}/career-arc

Retrieve athlete career arc data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
id string required Id
GET

Best By Decade

/best

Retrieve best by decade data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
division string required Division
decade integer required Decade
per_page integer optional Per Page (default: 10)
GET

Compare

/compare

Retrieve compare data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
athlete1 string required Athlete1
athlete2 string required Athlete2
GET

Contests

/contests

Retrieve contests data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
year integer optional Year (default: 0)
event_tier string optional Event Tier (default: )
search string optional Search (default: )
per_page integer optional Per Page (default: 20)
page integer optional Page (default: 1)
upcoming boolean optional Upcoming (default: )
order string optional Order (default: )
GET

Contest

/contests/{id}

Retrieve contest data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
id string required Id
GET

Contest By Slug

/contests/{slug}

Retrieve contest by slug data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
slug string required Slug
GET

Countries

/countries

Retrieve countries data from the Bodybuilding Database API.

Key Parameters

None.

GET

Country Olympia Titles

/countries/olympia-titles

Retrieve country olympia titles data from the Bodybuilding Database API.

Key Parameters

None.

GET

Country

/countries/{name}

Retrieve country data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
name string required Name
GET

Division Analytics

/division-analytics

Retrieve division analytics data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
division string optional Division (default: mens-open)
GET

Division Migration

/division-migration

Retrieve division migration data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
athlete string required Athlete
GET

Division Migrations

/division-migrations

Retrieve division migrations data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
per_page integer optional Per Page (default: 25)
GET

Divisions

/divisions

Retrieve divisions data from the Bodybuilding Database API.

Key Parameters

None.

GET

Division

/divisions/{id}

Retrieve division data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
id string required Id
GET

Feed

/feed

Retrieve feed data from the Bodybuilding Database API.

Key Parameters

None.

GET

Goat

/goat

Retrieve goat data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
division string optional Division (default: )
gender string optional Gender (default: )
per_page integer optional Per Page (default: 50)
mode string optional Mode (default: base)
GET

Olympia

/olympia

Retrieve olympia data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
year integer optional Year (default: 0)
division string optional Division (default: )
GET

Olympia Qualified

/olympia-qualified

Retrieve olympia qualified data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
year integer optional Year (default: 0)
GET

Olympia Winners

/olympia-winners

Retrieve olympia winners data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
division string required Division
GET

Olympia Year

/olympia/{year}

Retrieve olympia year data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
year integer required Year
division string optional Division (default: )
GET

On This Day

/on-this-day

Retrieve on this day data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
month integer optional Month (default: 9)
day integer optional Day (default: 7)
GET

Peak Window

/peak-window

Retrieve peak window data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
athlete string required Athlete
GET

Predictions

/predictions

Retrieve predictions data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
contest string optional Contest (default: olympia)
year integer optional Year (default: 0)
division string optional Division (default: mens-open)
GET

Prime Vs Prime

/prime-vs-prime

Retrieve prime vs prime data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
a string required A
b string required B
GET

Pseo Index

/pseo-index

Retrieve pseo index data from the Bodybuilding Database API.

Key Parameters

None.

GET

Rankings

/rankings

Retrieve rankings data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
type string optional Type (default: olympia_wins)
division string optional Division (default: )
gender string optional Gender (default: )
per_page integer optional Per Page (default: 50)
page integer optional Page (default: 1)
GET

Records

/records/{category}

Retrieve records data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
category string required Category
GET

Results

/results

Retrieve results data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
athlete_id integer optional Athlete Id (default: 0)
contest_id integer optional Contest Id (default: 0)
per_page integer optional Per Page (default: 50)
page integer optional Page (default: 1)
GET

Road To Olympia

/road-to-olympia

Retrieve road to olympia data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
division string optional Division (default: )
year integer optional Year (default: 0)
per_page integer optional Per Page (default: 50)
page integer optional Page (default: 1)
GET

Seasons

/seasons

Retrieve seasons data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
year integer optional Year (default: 0)
GET

Season Year

/seasons/{year}

Retrieve season year data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
year integer required Year
GET

Stats

/stats

Retrieve stats data from the Bodybuilding Database API.

Key Parameters

None.

GET

Top Lists

/top-lists

Retrieve top lists data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
category string optional Category (default: most_wins)
division string optional Division (default: )
per_page integer optional Per Page (default: 25)
GET

Top List Detail

/top-lists/{slug}

Retrieve top list detail data from the Bodybuilding Database API.

Key Parameters

NameTypeRequiredDescription
slug string required Slug
division string optional Division (default: )
per_page integer optional Per Page (default: 25)

Odds board pages use generated snapshots and prediction data. No separate public REST /odds route is registered; use /predictions for prediction payloads.

GET

List Athletes

/athletes

Retrieve a paginated list of bodybuilding athletes. Supports filtering by division, country, gender, and active status, plus text search.

Parameters

NameTypeRequiredDescription
searchstringoptionalFilter by athlete name
divisionstringoptionalFilter by division slug (e.g. mens-open, womens-bikini)
countrystringoptionalFilter by country name
genderstringoptionalFilter by gender (M or F)
activestringoptionalFilter active athletes (1 for active only)
sortstringoptionalSort field (e.g. name, total_wins)
orderstringoptionalSort direction: asc or desc
per_pageintegeroptionalResults per page (default: 20)
pageintegeroptionalPage number (default: 1)

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/athletes?search=Ronnie%20Coleman&per_page=1"

Example Response

{ "data": [ { "id": 1391, "canonical_name": "Ronnie Coleman", "slug": "ronnie-coleman", "country": "United States", "primary_division": "Men's Open Bodybuilding", "division": "mens-open", "total_wins": 27, "olympia_titles": 8 } ], "total": 2, "page": 1, "per_page": 1, "pages": 2 }
GET

Get Athlete

/athletes/{id}

Retrieve detailed information for a single athlete, including career statistics and full competition result history.

Parameters

NameTypeRequiredDescription
idstringrequiredAthlete numeric ID or slug (e.g. ronnie-coleman)

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/athletes/ronnie-coleman"

Example Response

{ "id": 1391, "canonical_name": "Ronnie Coleman", "slug": "ronnie-coleman", "country": "United States", "primary_division": "Men's Open Bodybuilding", "height_display": "5'11\" (180 cm)", "weight_display": "287 lb (130 kg)", "birthdate": "1964-05-13", "total_wins": 27, "olympia_wins": 8, "arnold_wins": null, "results": [ { "result_id": "108214", "placement": "4", "contest_name": "Mr. Olympia", "contest_year": "2007", "division_slug": "mens-open" } ] }
GET

List Contests

/contests

Retrieve a paginated list of bodybuilding contests. Filter by year, tier, or search by name.

Parameters

NameTypeRequiredDescription
yearintegeroptionalFilter by contest year
event_tierstringoptionalFilter by event tier
searchstringoptionalSearch contest names
per_pageintegeroptionalResults per page (default: 20)
pageintegeroptionalPage number (default: 1)

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/contests?year=2025&search=Arnold%20Classic&per_page=1"

Example Response

{ "data": [ { "id": 6177, "name": "Arnold Classic", "slug": "arnold-classic-2025", "year": 2025, "location": "Columbus, OH, USA", "event_tier": "major", "start_date": "2025-03-01", "result_count": 71 } ], "total": 1, "page": 1, "per_page": 1, "pages": 1 }
GET

Get Contest

/contests/{id}

Retrieve full details for a single contest, including all division results and placings.

Parameters

NameTypeRequiredDescription
idintegerrequiredContest ID

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/contests/6177"
GET

List Divisions

/divisions

Retrieve all 13 canonical IFBB Pro divisions with athlete counts and metadata.

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/divisions"

Example Response

[ { "slug": "mens-open", "name": "Men's Open Bodybuilding", "gender": "M", "is_ifbb_pro": true, "year_introduced": 1965, "result_count": 163208, "athlete_count": 56790 } ]
GET

Get Division

/divisions/{id}

Retrieve detailed information for a single division, including top athletes and historical data.

Parameters

NameTypeRequiredDescription
idstringrequiredDivision slug (e.g. mens-open, classic-physique)

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/divisions/classic-physique"
GET

Rankings

/rankings

Retrieve athlete rankings by total wins, Olympia wins, Arnold wins, and other statistical categories. Filterable by division.

Parameters

NameTypeRequiredDescription
typestringoptionalRanking type (default: olympia_wins)
divisionstringoptionalFilter by division slug
genderstringoptionalFilter by gender (M or F)
per_pageintegeroptionalResults per page (default: 50)
pageintegeroptionalPage number (default: 1)

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/rankings?type=total_wins&division=mens-open&per_page=10"
GET

GOAT Rankings

/goat

Retrieve the Greatest of All Time composite rankings, factoring in Olympia titles, total wins, longevity, and dominance.

Parameters

NameTypeRequiredDescription
divisionstringoptionalFilter by division slug
genderstringoptionalFilter by gender (M or F)
per_pageintegeroptionalResults per page (default: 50)
modestringoptionalScoring mode (default: base)

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/goat?division=mens-open&per_page=1"

Example Response

{ "division": "mens-open", "mode": "base", "male": [ { "id": 1391, "canonical_name": "Ronnie Coleman", "slug": "ronnie-coleman", "country": "United States", "total_wins": 27, "olympia_wins": 8, "goat_score": 79.79, "rank": 1 } ], "female": [] }
GET

Mr. Olympia

/olympia

Retrieve Mr. Olympia results. Returns all years by default, or filter by year and division.

Parameters

NameTypeRequiredDescription
yearintegeroptionalFilter by year (e.g. 2024)
divisionstringoptionalFilter by division slug

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/olympia?year=2024"
GET

Arnold Classic

/arnold

Retrieve Arnold Classic results. Returns all years by default, or filter by year and division.

Parameters

NameTypeRequiredDescription
yearintegeroptionalFilter by year (e.g. 2024)
divisionstringoptionalFilter by division slug

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/arnold?year=2025"
GET

Countries

/countries

Retrieve countries with codes, athlete counts, win totals, and active-athlete counts.

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/countries"

Example Response

[ { "country": "United States", "country_code": "US", "athlete_count": 82471, "total_wins": 40450, "active_athletes": 4743 } ]
GET

Database Statistics

/stats

Retrieve aggregate database statistics: total athletes, contests, results, division types, provenance, and year coverage.

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/stats"

Example Response

{ "total_athletes": 110616, "total_contests": 6782, "total_results": 351066, "total_division_types": 14, "total_countries": 147, "earliest_year": 1934, "latest_year": 2026, "active_athletes": 8650, "provenance": { "dataset_version": "2026-09-06", "dateModified": "2026-09-06", "confidence": { "athlete_tiers": { "unrated": 1395, "high": 74309, "medium": 34903, "review": 9, "verified": 0 }, "athletes": 110616 }, "agreement": { "results_total": 351066, "results_sourced": 336805, "results_multi": 183424 }, "temporal_coverage": "1934/2026", "citation": "Fitness Volt Bodybuilding Database, v2026-09-06", "tables": { "athlete_sources": { "record_count": 376482, "distinct_linked_entity_count": 109624, "distinct_named_source_count": 42 }, "contest_sources": { "record_count": 10349, "distinct_linked_entity_count": 6717, "distinct_named_source_count": 22 }, "result_sources": { "record_count": 525236, "distinct_linked_entity_count": 336805, "distinct_named_source_count": 12 } } } }
GET

On This Day

/on-this-day

Retrieve bodybuilding events that happened on a given date in history. Defaults to today's date.

Parameters

NameTypeRequiredDescription
monthintegeroptionalMonth number 1-12 (default: current month)
dayintegeroptionalDay number 1-31 (default: current day)

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/on-this-day?month=9&day=15"
GET

Predictions

/predictions

Retrieve data-driven contest predictions based on recent form, historical performance, and win momentum.

Parameters

NameTypeRequiredDescription
conteststringoptionalContest type: olympia or arnold (default: olympia)
yearintegeroptionalPrediction year (default: current year)
divisionstringoptionalDivision slug (default: mens-open)

Example Request

curl "https://fitnessvolt.com/wp-json/bodybuilding/v1/predictions?contest=olympia&year=2026&division=mens-open"

Attribution and Fair Use

The Bodybuilding Database API is free for non-commercial use with attribution required. Requests are rate-limited per IP (60 per minute; 600 with an optional API key).

Cache responses, stay within the limit, and link back to the source when publishing data, charts, widgets, or derived research.

Copy-Paste Attribution

Data by Fitness Volt Bodybuilding Database (https://fitnessvolt.com/bodybuilding). Used under CC-BY-NC-4.0 attribution.

Prefer not to write code? The embeddable widgets render the same data as a drop-in block.

Bodybuilding Data API

The Bodybuilding Data API provides programmatic access to 110,616 athlete profiles, 351,066 competition results, and 6,782 contests.

Public read endpoints return JSON without a login. Requests are limited to 60 per minute per IP, or 600 per minute with a valid API key sent in the X-API-Key header.