{"components":{"schemas":{"CancelRequest":{"properties":{"reason":{"description":"Optional reason, recorded in the audit log.","type":["string","null"]}},"type":"object"},"CancelResult":{"properties":{"cancelled":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"reason":{"type":["string","null"]},"registrants_notified":{"description":"Number of cancellation emails scheduled.","type":"integer"}},"required":["id","cancelled","registrants_notified"],"type":"object"},"CreateEventRequest":{"properties":{"city":{"maxLength":120,"type":["string","null"]},"description":{"type":"string"},"end_date":{"description":"Optional; defaults to start_date if omitted.","format":"date-time","type":["string","null"]},"is_public":{"default":false,"description":"Publish immediately and make publicly visible.","type":["boolean","null"]},"location":{"type":"string"},"max_capacity":{"default":100,"maximum":10000,"minimum":1,"type":["integer","null"]},"start_date":{"description":"ISO-8601, e.g. 2026-09-15T18:00:00Z.","format":"date-time","type":"string"},"title":{"maxLength":200,"minLength":3,"type":"string"}},"required":["title","description","location","start_date"],"type":"object"},"CreatedEvent":{"properties":{"admin_url":{"format":"uri","type":"string"},"event_url":{"format":"uri","type":"string"},"id":{"format":"uuid","type":"string"},"slug":{"type":"string"}},"required":["id","slug","event_url","admin_url"],"type":"object"},"Error":{"properties":{"error":{"properties":{"code":{"example":"UNAUTHORIZED","type":"string"},"message":{"type":"string"}},"type":"object"}},"required":["error"],"type":"object"},"Event":{"properties":{"capacity":{"type":"integer"},"city":{"type":["string","null"]},"description":{"type":"string"},"end_date":{"format":"date-time","type":["string","null"]},"image_url":{"format":"uri","type":["string","null"]},"location":{"type":"string"},"registration_url":{"format":"uri","type":"string"},"slug":{"type":"string"},"start_date":{"format":"date-time","type":"string"},"timezone":{"example":"Europe/Paris","type":"string"},"title":{"type":"string"},"url":{"format":"uri","type":"string"}},"required":["slug","title","description","location","start_date","timezone","capacity","url","registration_url"],"type":"object"},"EventList":{"properties":{"count":{"type":"integer"},"items":{"items":{"$ref":"#/components/schemas/Event"},"type":"array"},"limit":{"type":"integer"},"next_offset":{"type":["integer","null"]},"offset":{"type":"integer"}},"required":["items","count","limit","offset"],"type":"object"},"MyEvent":{"properties":{"event_url":{"format":"uri","type":"string"},"id":{"format":"uuid","type":"string"},"is_cancelled":{"type":"boolean"},"is_published":{"type":"boolean"},"max_capacity":{"type":"integer"},"registration_count":{"type":"integer"},"slug":{"type":"string"},"start_date":{"format":"date-time","type":"string"},"title":{"type":"string"}},"required":["id","slug","title","start_date","registration_count","max_capacity","is_published","is_cancelled","event_url"],"type":"object"},"MyEventDetail":{"properties":{"description":{"type":"string"},"end_date":{"format":"date-time","type":["string","null"]},"event_url":{"format":"uri","type":"string"},"id":{"format":"uuid","type":"string"},"is_cancelled":{"type":"boolean"},"is_published":{"type":"boolean"},"location":{"type":"string"},"max_capacity":{"type":"integer"},"registrations_confirmed":{"type":"integer"},"registrations_total":{"type":"integer"},"slug":{"type":"string"},"start_date":{"format":"date-time","type":"string"},"timezone":{"type":"string"},"title":{"type":"string"}},"required":["id","slug","title","description","location","start_date","timezone","max_capacity","is_published","is_cancelled","registrations_total","registrations_confirmed","event_url"],"type":"object"},"MyEventList":{"properties":{"count":{"type":"integer"},"items":{"items":{"$ref":"#/components/schemas/MyEvent"},"type":"array"}},"required":["items","count"],"type":"object"},"Registration":{"properties":{"checked_in":{"type":"boolean"},"email":{"format":"email","type":"string"},"name":{"type":"string"},"registered_at":{"format":"date-time","type":"string"},"status":{"description":"e.g. Confirmed, Pending, Cancelled.","type":"string"}},"required":["name","email","registered_at","status","checked_in"],"type":"object"},"RegistrationList":{"properties":{"count":{"type":"integer"},"items":{"items":{"$ref":"#/components/schemas/Registration"},"type":"array"}},"required":["items","count"],"type":"object"},"StaticItem":{"properties":{"slug":{"type":"string"},"url":{"format":"uri","type":"string"}},"required":["slug","url"],"type":"object"}},"securitySchemes":{"bearerAuth":{"description":"Personal API key (joe_live_…) from your dashboard, or an OAuth access token.","scheme":"bearer","type":"http"}}},"info":{"contact":{"email":"security@justoneevent.com"},"description":"Two surfaces: (1) a public, read-only catalogue (events, use-cases, guides) with no authentication, for LLM/agent consumption; (2) an authenticated REST surface (Authorization: Bearer <API key joe_live_… or OAuth token>) to create and manage your own events — the same capabilities as the MCP tools. Authenticated endpoints are under /me (plus POST /events).","license":{"name":"Proprietary"},"summary":"Public read-only catalogue + authenticated event management.","title":"JustOneEvent Public API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/events":{"get":{"description":"Returns published, listed, non-cancelled events whose effective end date is in the future.","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventList"}}},"description":"Paginated list of public events."}},"summary":"List public, published, upcoming events"},"post":{"description":"Creates an event owned by the authenticated key's user. Subject to the plan's active-event quota.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedEvent"}}},"description":"Event created."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request body."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing or invalid API key."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Plan active-event quota reached."}},"security":[{"bearerAuth":[]}],"summary":"Create an event (authenticated)"}},"/events/{slug}":{"get":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}},"description":"Public event detail."},"404":{"description":"Event not found, or not publicly visible."}},"summary":"Get a single public event by slug"}},"/guides":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/StaticItem"},"type":"array"}}},"description":"Static list of guide landing pages."}},"summary":"List canonical guide slugs and their URLs"}},"/me/events":{"get":{"parameters":[{"in":"query","name":"status","schema":{"default":"active","enum":["active","past","all"],"type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyEventList"}}},"description":"The user's events."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing or invalid API key."}},"security":[{"bearerAuth":[]}],"summary":"List the authenticated user's events"}},"/me/events/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyEventDetail"}}},"description":"Event detail."},"401":{"description":"Missing or invalid API key."},"404":{"description":"Event not found (or not owned by the caller)."}},"security":[{"bearerAuth":[]}],"summary":"Get one of the user's events (detail + registration stats)"}},"/me/events/{id}/cancel":{"post":{"description":"Cancels the event and emails its active registrants. Body is optional.","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelRequest"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelResult"}}},"description":"Cancelled."},"401":{"description":"Missing or invalid API key."},"404":{"description":"Event not found (or not owned by the caller)."}},"security":[{"bearerAuth":[]}],"summary":"Cancel one of the user's events"}},"/me/events/{id}/registrations":{"get":{"description":"Returns attendee name, email, registration date, status and check-in flag. Requires a paid plan (Premium/Pro/Business).","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationList"}}},"description":"Registrations."},"401":{"description":"Missing or invalid API key."},"403":{"description":"Requires a paid plan."},"404":{"description":"Event not found (or not owned by the caller)."}},"security":[{"bearerAuth":[]}],"summary":"List an event's registrations (paid plans only)"}},"/use-cases":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/StaticItem"},"type":"array"}}},"description":"Static list of use-case landing pages."}},"summary":"List canonical use-case slugs and their URLs"}}},"servers":[{"url":"https://www.justoneevent.com/api/v1"}]}