Polyglot API specification
OpenAPI 3 documentation for language backends that serve speakers and sponsors.
The live contract is openapi.yaml.
Implement a new API using AGENTS.md.
GET
/
API identity and endpoint catalog
Returns language metadata and the list of routes this process serves so the Elixir site can register it.
{
"api_version": "1.1.0",
"endpoints": [
"GET /health",
"GET /v1/speakers",
"GET /v1/sponsors"
],
"framework": "Sinatra",
"language": "Ruby"
}
GET
/health
Liveness
Cheap liveness probe used for boot health checks and keep-alives. Must not hit the database if possible.
{
"status": "ok"
}
POST
/internal/api-endpoints/register
Register this API with the Elixir site
Called once on boot. Bearer POLYGLOT_REGISTER_TOKEN. Upserts by language + base_url.
{
"id": "00000000-0000-0000-0000-000000000001",
"ok": true
}
GET
/v1/speakers
Listed speakers
Returns listed speakers. With ?year= each row includes languages and topics for that year's talks so listing filters work.
{
"data": [
{
"company": "Example",
"first_name": "Diana",
"languages": [
"elixir"
],
"last_name": "Pham",
"name": "Diana Pham",
"photo_path": "/images/speakers/diana-pham.jpg",
"slug": "diana-pham",
"topics": [
"development"
],
"year": 2026
}
]
}
GET
/v1/speakers/{slug}
Speaker detail (all years)
Full speaker profile across conferences, including talks, languages, and topics.
{
"data": {
"bio": "Speaker biography",
"name": "Diana Pham",
"other_years": [
2025,
2024
],
"slug": "diana-pham",
"talks": []
}
}
GET
/v1/speakers/{year}/{slug}
Speaker detail for a conference year
Year-scoped speaker page used by /speakers/{year}/{slug}. Includes that year's talks (with youtube_id when a recording exists) and other_years for navigation.
{
"data": {
"name": "Charles Nutter",
"other_years": [],
"slug": "charles-nutter",
"talks": [
{
"format": "keynote",
"languages": [
"ruby",
"java"
],
"slug": "bringing-ruby-to-the-jvm-making-the-impossible-possible",
"title": "Bringing Ruby to the JVM: Making the Impossible Possible",
"topics": [
"development"
],
"youtube_id": "pzm6I4liJlg"
}
],
"year": 2023
}
}
GET
/v1/sponsors
Listed sponsors
Returns listed sponsors. With ?year= each row includes that year's tier. description and blurb are the organization profile, the same text every year.
{
"data": [
{
"logo_path": "/images/sponsors/flywheel.png",
"name": "Flywheel",
"slug": "flywheel",
"tier": "platinum",
"website": "https://www.flywheelgreenvillesc.com",
"year": 2026
}
]
}
GET
/v1/sponsors/{slug}
Sponsor detail (all years)
Organization profile with website, socials, and description.
{
"data": {
"description": "Coworking campus in Greenville.",
"name": "Flywheel",
"slug": "flywheel",
"twitter_url": "https://x.com/flywheel",
"website": "https://www.flywheelgreenvillesc.com"
}
}
GET
/v1/sponsors/{year}/{slug}
Sponsor detail for a conference year
Year-scoped sponsor page used by /sponsors/{year}/{slug}. Tier is for that year. blurb repeats the organization description. other_years lists the other sponsored years.
{
"data": {
"blurb": "Home of the Carolina Code Conference.",
"name": "Flywheel",
"other_years": [
2025
],
"slug": "flywheel",
"tier": "platinum",
"year": 2026
}
}
GET
/v1/years
Conference years
Lists conference years so public pages can render year filters without hard-coding them.
{
"data": [
{
"year": 2026
},
{
"year": 2025
}
]
}