ASKTC API Reference
Build live Q&A, audience engagement, and event automation into your product. The ASKTC API is REST-based, returns JSON, and uses API key authentication.
Overview
API Key Auth
All requests require a Bearer token in the Authorization header.
REST + JSON
Standard HTTP methods. All responses are JSON.
AI-powered
Create events from plain English, cluster questions, and analyse sentiment.
Real-time ready
Pair with ASKTC's PartyKit layer for live audience data.
Authentication
All API requests must include your API key as a Bearer token in the Authorization header. API keys start with aktc_.
curl https://asktc.live/api/v1/events \
-H "Authorization: Bearer aktc_your_api_key_here"Rate Limits
Rate limits are enforced per API key using a sliding window. When exceeded, the API returns 429 Too Many Requests.
| Plan | Per minute | Per day |
|---|---|---|
| Pro | 300 | 10,000 |
| Enterprise | 1,000 | Unlimited |
| AI endpoints | 10 (all plans) | — |
Rate limit headers are returned on every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Events
/eventsList all events owned by the authenticated user.
/eventsCreate a new event.
titlestringrequiredThe event title. Max 100 characters.
event_codestringCustom join code (4–16 chars, A–Z 0–9). Auto-generated if omitted.
session_modeenumOne of panel, open_floor, thread. Defaults to panel.
descriptionstringOptional event description. Max 500 characters.
curl -X POST https://asktc.live/api/v1/events \
-H "Authorization: Bearer aktc_..." \
-H "Content-Type: application/json" \
-d '{"title": "DevDay Lagos 2026", "session_mode": "panel", "event_code": "DEVDAY26"}'/events/:codeUpdate an existing event's title, description, or status.
/events/:codePermanently delete an event and all associated data.
/events/:code/scheduleSet or clear the scheduled start time for an event.
scheduled_atISO 8601 stringSet to a future datetime to schedule, or null to clear.
Questions
/events/:code/questionsFetch all questions for an event, ordered by vote count.
/events/:code/questions/:idModerate a question — approve, reject, mark answered, or push to screen.
statusenumrequiredOne of pending, approved, on_screen, answered, rejected.
/events/:code/questions/clustersAI-powered — group semantically similar questions into clusters. Useful for surfacing themes across hundreds of submissions.
Panelists
/events/:code/panelistsList all panelists for an event.
/events/:code/panelistsAdd a panelist to an event.
namestringrequiredPanelist full name.
titlestringJob title or role.
topicsstringComma-separated topics this panelist covers.
/events/:code/panelists/:idRemove a panelist from an event.
Moderators
/events/:code/moderatorsList all co-moderators for an event.
/events/:code/moderatorsInvite a co-moderator by user ID.
user_idstringrequiredThe ASKTC user ID of the co-moderator.
/events/:code/moderators/:idRemove a co-moderator from an event.
Breakout Rooms
/events/:code/breakoutList all breakout rooms for an event.
/events/:code/breakoutCreate a breakout room.
namestringrequiredRoom name.
capacitynumberMax participants. Defaults to unlimited.
/events/:code/breakout/:idUpdate a breakout room's name or capacity.
/events/:code/breakout/:idDelete a breakout room.
AI
/ai/create-eventCreate a fully structured event from a natural language prompt. AI picks the right session mode, extracts named panelists, and generates everything in one call.
promptstringrequiredPlain English description of your event. Max 1000 characters.
event_codestringOverride the AI's suggested join code.
dry_runbooleanIf true, returns the AI plan without creating anything. Use to preview before committing.
curl -X POST https://asktc.live/api/v1/ai/create-event \
-H "Authorization: Bearer aktc_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "A fintech panel at Lagos Tech Week with Ada Obi covering regulation and Emeka Nwosu on infrastructure",
"dry_run": false
}'{
"event": {
"id": "evt_...",
"title": "Lagos Tech Week — Fintech Panel",
"event_code": "LAGOSTECHWK",
"session_mode": "panel",
"status": "waiting",
"created_at": "2026-08-02T10:00:00Z"
},
"panelists": [
{ "id": "p_...", "name": "Ada Obi", "title": null, "topics": "regulation" },
{ "id": "p_...", "name": "Emeka Nwosu","title": null, "topics": "infrastructure" }
],
"plan": {
"reasoning": "Named panelists detected; panel mode selected.",
"suggested_event_code": "LAGOSTECHWK"
},
"dry_run": false
}Reports & Analytics
/events/:code/reportFull event summary — questions, polls, answer counts, top voted, participation stats.
/events/:code/report/sendEmail the event report to the host and any specified recipients.
emailsstring[]Additional recipient emails beyond the host.
/events/:code/sentimentAggregated sentiment breakdown across all audience questions — positive, neutral, negative percentages with top themes.
Errors
All errors return a JSON object with an error field.
| Status | Meaning |
|---|---|
| 400 | Bad Request — missing or invalid parameters. |
| 401 | Unauthorized — missing or invalid API key. |
| 403 | Forbidden — your plan doesn't support this endpoint. |
| 404 | Not Found — event or resource doesn't exist. |
| 409 | Conflict — event code already taken. |
| 429 | Too Many Requests — rate limit exceeded. |
| 500 | Internal Server Error — something went wrong on our end. |
| 502 | Bad Gateway — AI service unavailable. |
{
"error": "Event code \"DEVDAY26\" is already taken. Pass a custom event_code or omit it to auto-generate."
}