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. Personal Access Token (PAT) authentication is required for non-public endpoints.
Authentication
Personal access token
Authenticate against the API with a Personal Access Token - a long-lived bearer token tied to your account.
For your own CLIs, scripts, or ops jobs. Issue a long-lived bearer token at your access tokens page and revoke it any time from the same page.
Header:
Authorization: Bearer mapat_...
Acts as: you (the token issuer)
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
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
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
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
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
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
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
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
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
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
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)
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)
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
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
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
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
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'