I recently launched PopDropkick.dev, a REST API for professional wrestling data — specifically focused on tracking wrestlers, promotions, championships, and detailed title reigns.
It started as a fun Laravel side project to explore API design and relationship modeling, but it’s grown into something more structured and (hopefully) useful to others.
The API handles:
- Wrestler profiles (with slugs, aliases, and debut dates)
- Promotions and cross-promotion affiliations
- Championship title reigns — including vacated titles and multi-reign tracking
I’ve populated it with a full history of the NXT Championship for now, and it’s ready for expansion into more titles and promotions (AEW, WWE, NJPW, etc.).
🔗 Links
Why I Built This
We consume and test with a lot of APIs at place my work but that data is never fun. Most wrestling stat sources are either static HTML, heavily scraped, or organized in a way that isn't developer-friendly. I wanted something:
- JSON-first
- RESTful and linkable
- Easy to query for reign history, current champions and something highly flexible
Each Title Reign ties to a Wrestler and a Championship, and includes:
won_on, lost_on
won_at, lost_at (events or shows)
reign_number
vacated logic
Human-readable reign length (like 6mos and 3w) is generated automatically based on date intervals.
Example: Tommaso Ciampa
Calling this endpoint:
GET /api/wrestlers/tommaso-ciampa
Returns:
{
"data": {
"id": "f05533f7-0ef1-4b65-b130-b12504f08852",
"slug": "tommaso-ciampa",
"ring_name": "Tommaso Ciampa",
"real_name": "Tommaso Whitney",
"also_known_as": [],
"active_title_reigns": [],
"promotions": [
{
"id": "5095d51e-adee-4173-824f-ecdad2b755ee",
"name": "NXT",
"slug": "nxt",
"detail_url": "https://popdropkick.dev/api/promotions/nxt",
"abbreviation": "NXT"
}
],
"active_promotions": [
{
"id": "5095d51e-adee-4173-824f-ecdad2b755ee",
"name": "NXT",
"slug": "nxt",
"detail_url": "https://popdropkick.dev/api/promotions/nxt",
"abbreviation": "NXT"
}
],
"debut_date": "2005-01-01",
"title_reigns": [
{
"championship_id": "395280ec-7cf0-42c7-ad50-b8da0c3ba6ba",
"championship_name": "NXT Championship",
"won_on": "2021-09-14",
"won_at": "NXT 2.0 (premiere)",
"lost_on": "2022-01-04",
"lost_at": "NXT New Year's Evil 2022",
"reign_number": 1,
"win_type": null,
"reign_length": 112,
"reign_length_human": "3mos and 3w"
},
{
"championship_id": "395280ec-7cf0-42c7-ad50-b8da0c3ba6ba",
"championship_name": "NXT Championship",
"won_on": "2018-07-25",
"won_at": "NXT (TV)",
"lost_on": "2019-02-20",
"lost_at": "vacated",
"reign_number": 1,
"win_type": null,
"reign_length": 210,
"reign_length_human": "6mos and 3w"
}
],
"created_at": "2025-07-10T14:59:36+00:00",
"updated_at": "2025-07-10T14:59:36+00:00"
},
"meta": {
"status": 200,
"counts": {
"title_reigns": 2,
"active_title_reigns": 0,
"promotions": 1,
"active_promotions": 1
},
"timestamps": {
"timestamp": "2025-07-10T16:01:03+00:00",
"response_time_ms": 61.45
}
},
"message": null
}
What's Next
- Add more championships and wrestlers (want to help?)
- Handle tag team title reigns (with multiple wrestlers per reign)
- Add pagination and filtering for title reigns
- More metadata: Longest/Shortest reign, Most reigns, Total Championships Held,
Days as Champion<-- done - Open up POST/PATCH endpoints for contributors
Want to Try It?
You can hit the live API at https://popdropkick.dev, or check out the source code on GitHub:
https://github.com/outofjam/popdropkickv1
The auto generated docs are at https://popdropkick.dev/docs/api
If you want to mess with protected routes (POST, PATCH), ping me and I’ll send over an API token.
Thanks for reading! Feedback is more than welcome.
Top comments (0)