Table of contents

v1.0.0 OpenAPI 3.1.0

meetAgain API

Programmatic access to public events, member-scoped actions (RSVP, comment, image upload), and admin-scoped reads. OAuth2 authentication required for non-public endpoints.

Server: / Download spec: JSON YAML

Authentication

Authentication methods

Three ways to authenticate against the API. Pick the one that matches who is making the call.

Methods at a glance

  • A) Server-to-server (OAuth) - your backend reads public data on its own. App identity only.
  • B) On behalf of a user (OAuth) - a third-party app acts as a meetAgain user who consented to it via a browser.
  • C) Personal access token (PAT) - you authenticate as yourself with a long-lived bearer token. No app to register, no consent screen. Issue one at your access tokens page.

Pick a flow

A Server-to-server

Bots or backends that read public data on their own. Limited to public endpoints (events, groups, CMS).

Grant: client_credentials

Acts as: the app itself (no user)

C Personal access token

Your own CLIs, scripts, or ops jobs. Issue a long-lived bearer token at your access tokens page - no consent dance, no OAuth round-trip. Revoke any time from the same page.

Header: Authorization: Bearer mapat_...

Acts as: you (the token issuer)

Authorize endpoint: /api/oauth/authorize  ·  Token endpoint: /api/oauth/token  ·  Tokens are RS256 JWTs valid for 1 hour. The authorization code flow also returns a refresh token (valid 30 days) you can swap for a fresh access token without re-prompting the user.

admin

Platform-admin actions over the API. Reserved for users with ROLE_ADMIN.

GET /api/v1/admin/logs/cron List recent cron run log entries

List recent cron run log entries

Security

oauth2 : api pat

Parameters

Name In Type Description
limit query integer
default: 100

Responses

Code Description
200 Paginated cron log list CronLogList
401 Missing or invalid bearer token
403 Insufficient role

Example request

curl '/api/v1/admin/logs/cron?limit=1' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/admin/logs/sendlog List email send-log entries

List email send-log entries

Security

oauth2 : api pat

Parameters

Name In Type Description
limit query integer
default: 100

Responses

Code Description
200 Paginated sendlog list SendlogList
401 Missing or invalid bearer token
403 Insufficient role

Example request

curl '/api/v1/admin/logs/sendlog?limit=1' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/admin/logs/cron/{id} Get a single cron log entry

Get a single cron log entry

Security

oauth2 : api pat

Parameters

Name In Type Description
id * path integer

Responses

Code Description
200 Cron log detail CronLogDetail
401 Missing or invalid bearer token
403 Insufficient role
404 Cron log not found

Example request

curl '/api/v1/admin/logs/cron/1' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/admin/logs/sendlog/{id} Get a single send-log entry

Get a single send-log entry

Security

oauth2 : api pat

Parameters

Name In Type Description
id * path integer

Responses

Code Description
200 Sendlog detail SendlogDetail
401 Missing or invalid bearer token
403 Insufficient role
404 Sendlog entry not found

Example request

curl '/api/v1/admin/logs/sendlog/1' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/admin/security/incidents List recent security incidents

List recent security incidents

Security

oauth2 : api pat

Parameters

Name In Type Description
limit query integer
default: 100
since query string (date-time) ISO-8601 datetime lower bound on endedAt

Responses

Code Description
200 Incident list IncidentList
401 Missing or invalid bearer token
403 Insufficient role

Example request

curl '/api/v1/admin/security/incidents?limit=1&since=value' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/admin/security/incidents/{id} Get a single security incident with full provider reports

Get a single security incident with full provider reports

Security

oauth2 : api pat

Parameters

Name In Type Description
id * path integer

Responses

Code Description
200 Incident detail IncidentDetail
401 Missing or invalid bearer token
403 Insufficient role
404 Incident not found

Example request

curl '/api/v1/admin/security/incidents/1' \
  -H "Authorization: Bearer $ACCESS_TOKEN"

event-actions

Authenticated user actions on events: RSVP, comments, image upload

POST /api/v1/events/{id}/rsvp RSVP yes to an event

RSVP yes to an event

Security

oauth2 : api pat

Responses

Code Description
200 RSVP added (or already present) RsvpResult
401 Missing or invalid Bearer token
403 Not allowed (group membership / blocked)
404 Event not found ErrorResponse
409 Event canceled or already started ErrorResponse

Example request

curl -X POST '/api/v1/events/{id}/rsvp' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/events/{id}/rsvp Remove RSVP from an event

Remove RSVP from an event

Security

oauth2 : api pat

Responses

Code Description
200 RSVP removed (or already absent) RsvpResult
401 Missing or invalid Bearer token
403 Not allowed
404 Event not found ErrorResponse
409 Event canceled or already started ErrorResponse

Example request

curl -X DELETE '/api/v1/events/{id}/rsvp' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
POST /api/v1/events/{id}/images Upload an image to an event

Upload an image to an event

Security

oauth2 : api pat

Request body

required

Content type: multipart/form-data

Name Type Description
file string (binary)

Responses

Code Description
201 Image uploaded ImageUploaded
400 No file or unsupported format ErrorResponse
401 Missing or invalid Bearer token
403 Not allowed
404 Event not found

Example request

curl -X POST '/api/v1/events/{id}/images' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@/path/to/file"
POST /api/v1/events/{id}/comments Post a comment on an event

Post a comment on an event

Security

oauth2 : api pat

Request body

required

Content type: application/json

Name Type Description
content string

Responses

Code Description
201 Comment created CommentCreated
400 Empty content ErrorResponse
401 Missing or invalid Bearer token
403 Not allowed
404 Event not found

Example request

curl -X POST '/api/v1/events/{id}/comments' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"content":"value"}'
DELETE /api/v1/events/{id}/images/{imageId} Delete an event image (own upload or admin)

Delete an event image (own upload or admin)

Security

oauth2 : api pat

Responses

Code Description
204 Image deleted
401 Missing or invalid Bearer token
403 Not your image and not admin
404 Image or event not found

Example request

curl -X DELETE '/api/v1/events/{id}/images/{imageId}' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
DELETE /api/v1/events/{id}/comments/{commentId} Delete an event comment (own or admin)

Delete an event comment (own or admin)

Security

oauth2 : api pat

Responses

Code Description
204 Comment deleted
401 Missing or invalid Bearer token
403 Not your comment and not admin
404 Comment or event not found

Example request

curl -X DELETE '/api/v1/events/{id}/comments/{commentId}' \
  -H "Authorization: Bearer $ACCESS_TOKEN"

events

Public event listings and detail

GET /api/v1/events List public upcoming events

List public upcoming events

Parameters

Name In Type Description
locale query string
from query string (date-time) ISO-8601 lower bound (default: now)
to query string (date-time) ISO-8601 upper bound
limit query integer
default: 20
offset query integer
default: 0

Responses

Code Description
200 Paginated event list EventList

Example request

curl '/api/v1/events?locale=en&from=value&to=value&limit=1&offset=1'
GET /api/v1/events/{id} Get a single event by ID

Get a single event by ID

Parameters

Name In Type Description
id * path integer
locale query string

Responses

Code Description
200 Event detail EventDetail
404 Event not found or not visible in current context ErrorResponse

Example request

curl '/api/v1/events/1?locale=value'

group-admin

Group-scoped admin actions. Requires Owner or Organizer role in the named group, or platform ROLE_ADMIN.

GET /api/v1/groups/{groupSlug}/admin/members List members of a group

List members of a group

Security

oauth2 : api pat

Parameters

Name In Type Description
groupSlug * path string

Responses

Code Description
200 Members list GroupMemberList
401 Missing or invalid bearer token
403 Caller is not Owner/Organizer of this group
404 Group not found ErrorResponse

Example request

curl '/api/v1/groups/groupSlug/admin/members' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/groups/{groupSlug}/admin/settings Read a group settings

Read a group settings

Security

oauth2 : api pat

Parameters

Name In Type Description
groupSlug * path string

Responses

Code Description
200 Group settings GroupSettings
401 Missing or invalid bearer token
403 Caller is not Owner/Organizer of this group
404 Group not found ErrorResponse

Example request

curl '/api/v1/groups/weiqi-club/admin/settings' \
  -H "Authorization: Bearer $ACCESS_TOKEN"

groups

Tenant groups (multisite)

GET /api/v1/groups List active groups

List active groups

Responses

Code Description
200 Array of group summaries GroupList

Example request

curl '/api/v1/groups'
GET /api/v1/groups/{groupSlug} Get a group by slug

Get a group by slug

Parameters

Name In Type Description
groupSlug * path string

Responses

Code Description
200 Group detail GroupDetail
404 Group not found ErrorResponse

Example request

curl '/api/v1/groups/groupSlug'
GET /api/v1/groups/{groupSlug}/cms List a group's CMS pages

List a group's CMS pages

Parameters

Name In Type Description
groupSlug * path string
language query string Two-letter language code. If omitted, each item's first available language is used. If given but the page lacks that language, falls back to 'en' (or the first available).

Responses

Code Description
200 List of CMS pages CmsPageList
404 Group not found ErrorResponse

Example request

curl '/api/v1/groups/weiqi-club/cms?language=en'
GET /api/v1/groups/{groupSlug}/cms/{cmsSlug} Get a CMS page metadata by group and slug

Get a CMS page metadata by group and slug

Parameters

Name In Type Description
groupSlug * path string
cmsSlug * path string
language query string

Responses

Code Description
200 CMS page metadata CmsPage
404 Group not found, or page not found / not visible in this group ErrorResponse

Example request

curl '/api/v1/groups/platform/cms/about?language=value'

me

Authenticated user (token-scoped reads)

GET /api/v1/me Get the authenticated user profile

Get the authenticated user profile

Security

oauth2 : api pat

Responses

Code Description
200 User profile MeProfile
401 Missing or invalid Bearer token

Example request

curl '/api/v1/me' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
GET /api/v1/me/rsvps List the authenticated user upcoming RSVPs

List the authenticated user upcoming RSVPs

Security

oauth2 : api pat

Responses

Code Description
200 Array of upcoming events the user has RSVPed to MeRsvpList
401 Missing or invalid Bearer token

Example request

curl '/api/v1/me/rsvps' \
  -H "Authorization: Bearer $ACCESS_TOKEN"

status

status

GET /api/status Health check endpoint

Health check endpoint

Responses

Code Description
200 Service is healthy HealthStatus

Example request

curl '/api/status'