AINT-38This document covers all GraphQL additions and changes introduced in this branch. The branch implements a full Engagement Events and Event Applications feature, including payment flows, attendance tracking, QR code ticket generation, comments, tags, and favourites.
engagementEventsReturns a paginated list of engagement events, filterable by status, office, tags, favourites, etc.
Returns: EngagementEventList (paginated)
Arguments:
Argument | Type | Required |
|---|---|---|
|
| No |
|
| No |
Example:
query {
engagementEvents(
filters: {
statuses: [published]
hostOfficeIds: [1, 2]
tagIds: [10, 11]
tagFilterOperator: "AND"
my: "managed"
isFavourited: false
}
pagination: { page: 1, perPage: 10 }
) {
data {
id
title
description
status
startTime
endTime
applicationDeadline
location
googlePlaceId
contactInformation
eventGuideline
refundPolicy
feeCents
currency {
id
name
}
hostOffice {
id
name
}
managers {
id
fullName
}
engagementEventSpeakers {
id
name
description
profilePicture {
url
}
}
engagementEventDayActivities {
id
day
title
description
startTime
endTime
engagementEventSpeakers {
id
name
}
}
coverImage {
url
}
comments {
id
body
}
tagLists {
id
name
}
isFavourited
permissions {
canPublish
canUnpublish
canUpdate
canCreateComment
canDeleteComment
canManageTags
canFavourite
}
createdAt
updatedAt
}
paging {
totalCount
totalPages
currentPage
}
}
}
engagementEventFetches a single engagement event by ID.
Returns: EngagementEvent
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
query {
engagementEvent(id: "42") {
id
title
description
status
startTime
endTime
applicationDeadline
location
eventGuideline
refundPolicy
feeCents
currency {
id
name
}
engagementEventSpeakers {
id
name
}
engagementEventDayActivities {
id
day
title
}
permissions {
canUpdate
canPublish
canCreateComment
canFavourite
}
}
}
eventApplicationsReturns a paginated, filterable list of event applications. Supports filtering by status, event, person, date range, and sorting.
Returns: EventApplicationList (paginated)
Arguments:
Argument | Type | Required |
|---|---|---|
|
| No |
|
| No |
Example:
query {
eventApplications(
filters: {
statuses: [in_review, accepted]
engagementEventIds: [42]
personIds: [101]
startTime: { from: "2026-01-01", to: "2026-06-30" }
endTime: { from: "2026-01-01", to: "2026-12-31" }
my: "applied"
sort: start_time
sortDirection: DESC
}
pagination: { page: 1, perPage: 20 }
) {
data {
id
status
additionalDetails
ticketId
inReviewAt
engagementEvent {
id
title
}
person {
id
fullName
}
cv {
url
}
ticketPdf {
url
}
qrCode {
url
}
permissions {
canUpdate
canAccept
canReject
canConfirmPayment
canWithdraw
canDownloadTicket
canAbsent
}
createdAt
updatedAt
}
paging {
totalCount
totalPages
currentPage
}
}
}
eventApplicationFetches a single event application by ID.
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
query {
eventApplication(id: "7") {
id
status
ticketId
ticketPdf {
url
}
qrCode {
url
}
permissions {
canAccept
canReject
canWithdraw
canDownloadTicket
}
}
}
createEngagementEventCreates a new engagement event. The current user is automatically set as creator and first manager. Speakers can be nested inline.
Returns: EngagementEvent
Arguments:
Argument | Type | Required |
|---|---|---|
|
| No |
Example:
mutation {
createEngagementEvent(
engagementEvent: {
title: "AIESEC Leadership Summit"
description: "Annual leadership event"
startTime: "2026-09-01T09:00:00Z"
endTime: "2026-09-03T18:00:00Z"
applicationDeadline: "2026-08-15T23:59:00Z"
hostOfficeId: "5"
location: "Cairo, Egypt"
googlePlaceId: "ChIJxxxxxxxxx"
contactInformation: "events@aiesec.org"
eventGuideline: "Bring your student ID"
refundPolicy: "Non-refundable"
feeCents: 5000
currencyId: "1"
managerIds: ["101", "102"]
coverImage: {
content: "data:image/png;base64,..."
filename: "cover.png"
}
engagementEventSpeakersAttributes: [
{
name: "Jane Doe"
description: "Keynote speaker"
profilePicture: {
content: "data:image/png;base64,..."
filename: "jane.png"
}
}
]
engagementEventDayActivitiesAttributes: [
{
day: 1
title: "Opening Ceremony"
description: "Welcome and introductions"
startTime: "2026-09-01T09:00:00Z"
endTime: "2026-09-01T11:00:00Z"
engagementEventSpeakerIds: ["1"]
}
]
}
) {
id
title
status
}
}
updateEngagementEventUpdates an existing engagement event. Speakers and day activities support nested upsert/destroy via _destroy: true.
Returns: EngagementEvent
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
|
| No |
Example:
mutation {
updateEngagementEvent(
id: "42"
engagementEvent: {
title: "Updated Summit Title"
feeCents: 7500
engagementEventSpeakersAttributes: [
{ id: "3", _destroy: true }
{ name: "New Speaker", description: "New session" }
]
}
) {
id
title
feeCents
}
}
inReviewEngagementEventTransitions an engagement event to in_review status, marking it ready for publishing approval.
Returns: EngagementEvent
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
inReviewEngagementEvent(id: "42") {
id
status
}
}
publishEngagementEventPublishes an engagement event (must be in in_review status). Records published_at and published_by.
Returns: EngagementEvent
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
publishEngagementEvent(id: "42") {
id
status
}
}
bulkAssignManagersForEventsBulk-assigns one or more managers to multiple engagement events. Only events the current user can update are affected.
Returns: [EngagementEvent]
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
|
| Yes |
Example:
mutation {
bulkAssignManagersForEvents(ids: ["42", "43"], managerIds: [101, 102]) {
id
managers {
id
fullName
}
}
}
bulkUnassignManagersForEventsBulk-unassigns managers from multiple engagement events. Passing an empty managerIds removes all managers.
Returns: [EngagementEvent]
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
|
| Yes |
Example:
mutation {
bulkUnassignManagersForEvents(ids: ["42", "43"], managerIds: [101]) {
id
managers {
id
fullName
}
}
}
createCommentForEngagementEventCreates a comment on an engagement event. The author is automatically set to the current user.
Returns: Comment
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
|
| No |
Example:
mutation {
createCommentForEngagementEvent(
engagementEventId: "42"
comment: { body: "Looking forward to this event!" }
) {
id
body
}
}
bulkTagUpdateForEngagementEventsReplaces the tag list for multiple engagement events in bulk. Only events the current user can update are affected.
Returns: [EngagementEvent]
Arguments:
Argument | Type | Required |
|---|---|---|
|
| No |
|
| No |
Example:
mutation {
bulkTagUpdateForEngagementEvents(ids: [42, 43], tagListIds: [10, 11, 12]) {
id
tagLists {
id
name
}
}
}
favouriteEngagementEventMarks an engagement event as favourited by the current user.
Returns: EngagementEvent
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
favouriteEngagementEvent(id: "42") {
id
isFavourited
}
}
unfavouriteEngagementEventRemoves the current user's favourite from an engagement event.
Returns: EngagementEvent
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
unfavouriteEngagementEvent(id: "42") {
id
isFavourited
}
}
createEventApplicationCreates a new event application for the current user. Automatically transitions to pending_payment for paid events or in_review for free events. Supports re-applying for a previously withdrawn application (once). CV can be provided as base64 upload or via an existing attachment ID.
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| No |
Example (new application with CV upload):
mutation {
createEventApplication(
eventApplication: {
engagementEventId: "42"
additionalDetails: "I am very motivated to attend."
cv: { content: "data:application/pdf;base64,...", filename: "my_cv.pdf" }
}
) {
id
status
ticketId
}
}
Example (reuse existing CV by attachment ID):
mutation {
createEventApplication(
eventApplication: {
engagementEventId: "42"
additionalDetails: "I am very motivated to attend."
cvId: "88"
}
) {
id
status
}
}
updateEventApplicationUpdates an existing event application's details. Requires :update permission on the application.
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
|
| No |
Example:
mutation {
updateEventApplication(
id: "7"
eventApplication: { additionalDetails: "Updated motivation statement." }
) {
id
additionalDetails
}
}
acceptEventApplicationAccepts an event application in in_review status. On acceptance, a unique ticket_id is generated and a QR code + PDF ticket are generated asynchronously.
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
acceptEventApplication(id: "7") {
id
status
ticketId
}
}
rejectEventApplicationRejects an event application in in_review status.
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
rejectEventApplication(id: "7") {
id
status
}
}
withdrawEventApplicationAllows an applicant to withdraw their application while it is in applied, pending_payment, in_review, or accepted status.
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
withdrawEventApplication(id: "7") {
id
status
}
}
confirmPaymentEventApplicationConfirms payment for an application in pending_payment status, advancing it to in_review.
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
confirmPaymentEventApplication(id: "7") {
id
status
}
}
attendedEventApplicationMarks an accepted application as attended. The id can be either the application's database ID or its ticket_id string (used for QR scanning at event entry).
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example (by DB id):
mutation {
attendedEventApplication(id: "7") {
id
status
}
}
Example (by ticket_id via QR scan):
mutation {
attendedEventApplication(id: "A3F9C2") {
id
status
ticketId
}
}
absentEventApplicationMarks an accepted application as absent.
Returns: EventApplication
Arguments:
Argument | Type | Required |
|---|---|---|
|
| Yes |
Example:
mutation {
absentEventApplication(id: "7") {
id
status
}
}
EngagementEventRepresents an event managed by an AIESEC entity. Entirely new type added in this branch.
Field | Type | Description |
|---|---|---|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| Enum: |
|
| The organizing office |
|
| |
|
| |
|
| Ordered by |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| Fee amount in cents (0 = free) |
|
| |
|
| |
|
| |
|
| |
|
| Whether current user has favourited |
|
| |
|
| |
|
|
EngagementEventListPaginated wrapper for EngagementEvent. New type added in this branch.
Field | Type |
|---|---|
|
|
|
|
|
|
EngagementEventSpeakerRepresents a speaker associated with an engagement event. New type added in this branch.
Field | Type |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
EngagementEventDayActivityRepresents a scheduled activity within a day of the engagement event. New type added in this branch.
Field | Type |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EventApplicationRepresents a person's application to an engagement event, including ticket, CV, QR code, and permission state. New type added in this branch.
Field | Type | Description |
|---|---|---|
|
| |
|
| |
|
| The applicant |
|
| Motivation/extra info |
|
| Enum (see below) |
|
| Uploaded CV attachment |
|
| Short unique ticket code (generated on accept) |
|
| PDF ticket (generated async after accept) |
|
| QR code image (generated async after accept) |
|
| When the application entered review |
|
| |
|
| |
|
|
EventApplicationListPaginated wrapper for EventApplication. New type added in this branch.
Field | Type |
|---|---|
|
|
|
|
|
|
EventApplicationPermissionTypeGranular permission flags for actions on an event application. New type added in this branch.
Field | Type | Condition |
|---|---|---|
|
| User has |
|
| User has |
|
| User has |
|
| User has |
|
| User has |
|
| Status is |
|
| User has |
EventPermissionNewly added fields:
Field | Type | Condition |
|---|---|---|
|
| User can |
|
| User can |
|
| User can |
|
| User can |
No fields were removed.
EngagementEventInputInput for creating or updating an engagement event.
Argument | Type | Required |
|---|---|---|
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
|
| No |
EngagementEventSpeakerInputNested input for managing speakers. Supports create, update and destroy.
Argument | Type | Notes |
|---|---|---|
|
| Provide to update/destroy an existing speaker |
|
| |
|
| |
|
| Base64 image upload |
|
| Set |
EngagementEventDayActivityInputNested input for managing day activities. Supports create, update and destroy.
Argument | Type | Notes |
|---|---|---|
|
| Provide to update/destroy an existing activity |
|
| |
|
| |
|
| |
|
| |
|
| Link existing speakers to this activity |
|
| Set |
EngagementEventFilterInputFilter input for the engagementEvents query.
Argument | Type | Notes |
|---|---|---|
|
| Filter by one or more statuses |
|
| Filter by host office |
|
| e.g. |
|
| Filter by tag IDs |
|
| Filter by current user's favourites |
|
|
|
EventApplicationInputInput for creating or updating an event application.
Argument | Type | Notes |
|---|---|---|
|
| Target event |
|
| Motivation text |
|
| Base64 CV upload (PDF or image) |
|
| Existing |
EventApplicationFilterInputFilter input for the eventApplications query.
Argument | Type | Notes |
|---|---|---|
|
| Filter by one or more statuses |
|
| Filter by event |
|
| Filter by applicant |
|
| Filter by event start time range |
|
| Filter by event end time range |
|
| e.g. |
|
|
|
|
|
|
EngagementEventStatusValues are derived from the EngagementEvent model statuses:
Value | Description |
|---|---|
| Newly created, not yet submitted for review |
| Submitted for review, awaiting publish approval |
| Live and accepting applications |
| Event has concluded |
EventApplicationStatusValues are derived from the EventApplication model statuses:
Value | Description |
|---|---|
| Initial state (free events skip this — go straight to |
| Awaiting payment confirmation (paid events only) |
| Application under review by managers |
| Application accepted; ticket and QR code generated |
| Application rejected |
| Applicant confirmed present at the event |
| Applicant marked absent |
| Applicant withdrew (can reapply once) |
EventApplicationSortOptionExtends BaseSortOption:
Value |
|---|
|
|