{
    "openapi": "3.1.0",
    "info": {
        "title": "Cloud Datacenter Convention (CDC) Public AI API",
        "version": "1.0.0",
        "description": "Universal Read-Only API for AI Assistants (ChatGPT, Claude, Codex, Cursor). Discover cloud & data center conventions, public schedules, keynote speakers, sponsors, and registration passes. Protected agendas are automatically redacted."
    },
    "servers": [
        {
            "url": "https://clouddatacenter.events",
            "description": "Production Server"
        }
    ],
    "paths": {
        "/api/mcp/events": {
            "get": {
                "summary": "List active conventions",
                "operationId": "listEvents",
                "description": "List upcoming conventions with search, category, or country filters.",
                "parameters": [
                    {
                        "name": "search",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Search keyword"
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Category slug"
                    },
                    {
                        "name": "country",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Country name"
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 25
                        },
                        "description": "Max count"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of events",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/events/{slug}": {
            "get": {
                "summary": "Get comprehensive event details",
                "operationId": "getEvent",
                "description": "Get full event details. Note: If agenda protection is active, session schedules are redacted.",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Event slug"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Event details",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/events/{slug}/agenda": {
            "get": {
                "summary": "Get event agenda schedule",
                "operationId": "getEventAgenda",
                "description": "Get agenda schedule. Protected agendas return protected status with empty days.",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Event slug"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Event schedule (or protection notice if locked)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/events/{slug}/passes": {
            "get": {
                "summary": "Get event passes and pricing",
                "operationId": "getEventPasses",
                "description": "Retrieve ticket tiers, prices, currency, VIP perks, and registration links.",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Event slug"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Passes and ticket tiers",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/events/{slug}/faq": {
            "get": {
                "summary": "Get event frequently asked questions",
                "operationId": "getEventFaq",
                "description": "Retrieve FAQ regarding venue, parking, dress code, and attendance policies.",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Event slug"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "FAQ list",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/events/{slug}/stats": {
            "get": {
                "summary": "Get verified event scale and attendee statistics",
                "operationId": "getEventStats",
                "description": "Retrieve attendee numbers, C-level percentages, sponsor totals, and speaker counts.",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Event slug"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Event statistics metrics",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/events/{slug}/visuals": {
            "get": {
                "summary": "Get event recap video and photo gallery",
                "operationId": "getEventVisuals",
                "description": "Retrieve official recap video URL, poster thumbnail, and activity gallery images.",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Event slug"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Visual media assets and gallery",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/events/{slug}/advisory-board": {
            "get": {
                "summary": "Get event Advisory Board members",
                "operationId": "getEventAdvisoryBoard",
                "description": "Retrieve executive Advisory Board members, leadership job titles, organizations, high-resolution portrait photos, and company logos.",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Event slug"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Advisory Board member profiles",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/search": {
            "get": {
                "summary": "Search conventions by keyword",
                "operationId": "searchEvents",
                "description": "Full-text keyword search across convention titles, summaries, and locations.",
                "parameters": [
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Search keyword (e.g. \"Singapore\", \"Cooling\", \"AI\")"
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 20
                        },
                        "description": "Max count"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Search results",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/speakers": {
            "get": {
                "summary": "Search speakers across conventions",
                "operationId": "listSpeakers",
                "description": "Search keynote speakers and panelists. Omits speakers on locked agendas.",
                "parameters": [
                    {
                        "name": "query",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Name or company query"
                    },
                    {
                        "name": "event_slug",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filter by event"
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 30
                        },
                        "description": "Limit"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of speakers",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/sponsors": {
            "get": {
                "summary": "Get event sponsors and tiers",
                "operationId": "listSponsors",
                "description": "List sponsors, exhibitors, and offers for an event.",
                "parameters": [
                    {
                        "name": "event_slug",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Event slug"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Sponsor tiers and companies",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/categories": {
            "get": {
                "summary": "List convention categories",
                "operationId": "listCategories",
                "description": "List event categories with event count.",
                "responses": {
                    "200": {
                        "description": "Categories",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp/speakers/image": {
            "get": {
                "summary": "Get speaker or advisory board portrait photo",
                "operationId": "getSpeakerImage",
                "description": "Retrieve the authentic speaker or advisory board portrait photo as a PNG image stream or JSON metadata. Never search the public web for speaker photos.",
                "parameters": [
                    {
                        "name": "url",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Direct photo URL"
                    },
                    {
                        "name": "speaker_name",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Speaker name to look up photo for"
                    },
                    {
                        "name": "speaker_id",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Speaker ID"
                    },
                    {
                        "name": "format",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": "png",
                            "enum": [
                                "png",
                                "webp",
                                "jpeg"
                            ]
                        },
                        "description": "Target image format (default: png)"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Speaker portrait image or metadata",
                        "content": {
                            "image/png": {
                                "schema": {
                                    "type": "string",
                                    "format": "binary"
                                }
                            },
                            "image/webp": {
                                "schema": {
                                    "type": "string",
                                    "format": "binary"
                                }
                            },
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}