Airmeet Public API

Create and manage events, sessions, speakers, booths and event series; manage registrations; read engagement and attendance data; and register webhook subscriptions on the Airmeet events platform.

OpenAPI Specification

airmeet-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Airmeet Public API
  version: '1.0'
  description: >-
    The Airmeet Public API lets you programmatically manage events (Airmeets),
    registrations, sessions, speakers, booths and event series on the Airmeet
    virtual, hybrid and in-person events platform, and read back event
    engagement and attendance data. Authentication is a two-step flow: exchange
    an access key and secret key at POST /auth for a bearer access token (valid
    30 days), then send that token as the X-Airmeet-Access-Token header on every
    other request. Several read endpoints (attendees, booth attendance, UTMs,
    replay attendance) are asynchronous and return a job/URL to poll for the
    result. Responses share a { "success": boolean, "data": ... } envelope.
  contact:
    name: Airmeet Support
    email: support@airmeet.com
    url: https://help.airmeet.com/support/solutions/82000362508
  termsOfService: https://www.airmeet.com/hub/terms-of-use/
externalDocs:
  description: Airmeet Public API documentation
  url: https://help.airmeet.com/support/solutions/articles/82000467794-airmeet-public-api-introduction
servers:
  - url: https://api-gateway.airmeet.com/prod
    description: Default region (Mumbai)
  - url: https://api-gateway-prod.eu.airmeet.com/prod
    description: EU region
  - url: https://api-gateway-prod.us.airmeet.com/prod
    description: US region
tags:
  - name: Authentication
    description: Exchange access/secret keys for an access token.
  - name: Event Details
    description: Read events, participants, sessions, engagement and attendance data.
  - name: Manage Registrations
    description: Add authorized attendees and block or unblock them.
  - name: Manage Event
    description: Create and manage events, speakers, sessions, booths and landing pages.
  - name: Manage Event Series
    description: List event series and the events within a series.
  - name: Webhooks
    description: Register webhook subscriptions for Airmeet event triggers.
security:
  - accessToken: []
paths:
  /auth:
    post:
      operationId: authenticate
      summary: Authenticate and issue an access token
      description: >-
        Exchange the community access key and secret key for an access token
        valid for 30 days. The token can be cached by the consumer service.
      tags: [Authentication]
      security:
        - accessKey: []
          secretKey: []
      responses:
        '200':
          description: Access token issued.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success: { type: boolean }
                  data:
                    type: object
                    properties:
                      label: { type: string }
                      token: { type: string, description: Access token for X-Airmeet-Access-Token. }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeets:
    get:
      operationId: listAirmeets
      summary: List accessible Airmeets
      description: List all Airmeets (events) the credentials can access, with pagination.
      tags: [Event Details]
      parameters:
        - { name: pageNumber, in: query, schema: { type: integer }, description: Page number for pagination. }
        - { name: pageSize, in: query, schema: { type: integer }, description: Number of records per page. }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/info:
    get:
      operationId: getAirmeetInfo
      summary: Get event and session details
      description: Fetch the sessions and metadata within an event.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '412': { $ref: '#/components/responses/PreconditionFailed' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/participants:
    get:
      operationId: getParticipants
      summary: Get event participants
      description: Fetch the participants/registrants of an event.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '412': { $ref: '#/components/responses/PreconditionFailed' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/custom-fields:
    get:
      operationId: getCustomFields
      summary: Get custom registration fields
      description: Fetch the custom registration fields configured for an event.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/attendees:
    get:
      operationId: getAttendees
      summary: Get event attendance data (async)
      description: >-
        Fetch event attendance data. This is an asynchronous endpoint that
        returns a job reference to poll for the generated data.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/AsyncAccepted' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '412': { $ref: '#/components/responses/PreconditionFailed' }
        '500': { $ref: '#/components/responses/ServerError' }
  /session/{sessionId}/attendees:
    get:
      operationId: getSessionAttendees
      summary: Get session attendance (async)
      description: Fetch session attendance data asynchronously.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/SessionId' } ]
      responses:
        '200': { $ref: '#/components/responses/AsyncAccepted' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/booths:
    get:
      operationId: listBooths
      summary: List event booths
      description: List all booths configured for an event.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
    post:
      operationId: createBooth
      summary: Create a booth
      description: Add a booth to your Airmeet event.
      tags: [Manage Event]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/BoothCreate' }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/booth/{boothId}/booth-attendance:
    get:
      operationId: getBoothAttendance
      summary: Get booth attendance (async)
      description: Fetch booth attendees asynchronously.
      tags: [Event Details]
      parameters:
        - { $ref: '#/components/parameters/AirmeetId' }
        - { name: boothId, in: path, required: true, schema: { type: string }, description: Booth identifier. }
      responses:
        '200': { $ref: '#/components/responses/AsyncAccepted' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/polls:
    get:
      operationId: getPolls
      summary: Get poll responses
      description: Fetch poll responses submitted during an event.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/questions:
    get:
      operationId: getQuestions
      summary: Get Q&A questions
      description: Fetch questions asked during an event.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/tracks:
    get:
      operationId: getTracks
      summary: Get event tracks
      description: Fetch the tracks configured for an event.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/utms:
    get:
      operationId: getUtms
      summary: Get registration UTM parameters (async)
      description: Fetch registration UTM parameters asynchronously.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/AsyncAccepted' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/session-recordings:
    get:
      operationId: getSessionRecordings
      summary: Get session recording links
      description: Fetch download links for session recordings.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/event-replay-attendees:
    get:
      operationId: getEventReplayAttendees
      summary: Get replay attendance (async)
      description: Fetch on-demand/replay attendance data asynchronously.
      tags: [Event Details]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      responses:
        '200': { $ref: '#/components/responses/AsyncAccepted' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/attendee:
    post:
      operationId: addAttendee
      summary: Add an authorized attendee
      description: >-
        Add an attendee authorized to enter the specified Airmeet. Supports
        custom registration field mappings via customFieldMapping.
      tags: [Manage Registrations]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/AttendeeCreate' }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/attendee/block:
    put:
      operationId: blockAttendee
      summary: Block an attendee
      description: Block an attendee from the specified Airmeet.
      tags: [Manage Registrations]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [attendeeEmail]
              properties:
                attendeeEmail: { type: string, format: email }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/attendee/unblock:
    put:
      operationId: unblockAttendee
      summary: Unblock an attendee
      description: Remove block restrictions on an attendee.
      tags: [Manage Registrations]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [attendeeEmail]
              properties:
                attendeeEmail: { type: string, format: email }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet:
    post:
      operationId: createAirmeet
      summary: Create an event
      description: Create an Airmeet in your community.
      tags: [Manage Event]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/AirmeetCreate' }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/speaker:
    post:
      operationId: addSpeaker
      summary: Add a speaker
      description: Add a speaker to your Airmeet event.
      tags: [Manage Event]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/SpeakerCreate' }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/session:
    post:
      operationId: createSession
      summary: Create a session
      description: Add a session to your Airmeet event.
      tags: [Manage Event]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/SessionCreate' }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/session/{sessionId}:
    delete:
      operationId: deleteSession
      summary: Delete a session
      description: Delete a session in your Airmeet.
      tags: [Manage Event]
      parameters:
        - { $ref: '#/components/parameters/AirmeetId' }
        - { $ref: '#/components/parameters/SessionId' }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/status:
    post:
      operationId: updateAirmeetStatus
      summary: Update event status
      description: >-
        Start and end your Airmeet programmatically without visiting the
        dashboard. Status is one of ONGOING, PAUSED, FINISHED, ARCHIVE.
      tags: [Manage Event]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [status]
              properties:
                status:
                  type: string
                  enum: [ONGOING, PAUSED, FINISHED, ARCHIVE]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/landing-page:
    put:
      operationId: customizeLandingPage
      summary: Customize the landing page
      description: Customize the landing page for your Airmeet.
      tags: [Manage Event]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ambience: { type: string }
                layout: { type: string }
                highlightColor: { type: string }
                buttonTextColor: { type: string }
                imageUrl: { type: string }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /airmeet/{airmeetId}/duplication:
    post:
      operationId: duplicateAirmeet
      summary: Duplicate an event
      description: Duplicate an Airmeet.
      tags: [Manage Event]
      parameters: [ { $ref: '#/components/parameters/AirmeetId' } ]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                eventName: { type: string }
                startTime: { type: string }
                timezone: { type: string }
                duplicateSpeakers: { type: boolean }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /event-series:
    get:
      operationId: listEventSeries
      summary: List event series
      description: Get a list of all event series in a community.
      tags: [Manage Event Series]
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /event-series/{eventSeriesId}/events:
    get:
      operationId: listEventSeriesEvents
      summary: List events within a series
      description: Retrieve a list of all events inside an event series.
      tags: [Manage Event Series]
      parameters:
        - { name: eventSeriesId, in: path, required: true, schema: { type: string }, description: Event series identifier. }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
  /platform-integration/v1/webhook-register:
    post:
      operationId: registerWebhook
      summary: Register a webhook subscription
      description: >-
        Register a webhook endpoint to receive Airmeet event triggers. Uses the
        x-access-key and x-secret-key headers. Provide a triggerMetaInfoId for
        the event type to subscribe to; event-specific triggers accept an
        airmeetId query parameter.
      tags: [Webhooks]
      security:
        - webhookAccessKey: []
          webhookSecretKey: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [name, triggerMetaInfoId, url]
              properties:
                name: { type: string }
                description: { type: string }
                triggerMetaInfoId: { type: string, description: Identifier of the webhook trigger/event type. }
                url: { type: string, format: uri, description: Destination URL to receive webhook POSTs. }
                platformName: { type: string }
      responses:
        '200': { $ref: '#/components/responses/Success' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/ServerError' }
components:
  securitySchemes:
    accessKey:
      type: apiKey
      in: header
      name: X-Airmeet-Access-Key
      description: Community access key, presented at POST /auth.
    secretKey:
      type: apiKey
      in: header
      name: X-Airmeet-Secret-Key
      description: Community secret key, presented at POST /auth.
    accessToken:
      type: apiKey
      in: header
      name: X-Airmeet-Access-Token
      description: Bearer access token issued by POST /auth, valid for 30 days.
    webhookAccessKey:
      type: apiKey
      in: header
      name: x-access-key
      description: Access key for webhook registration.
    webhookSecretKey:
      type: apiKey
      in: header
      name: x-secret-key
      description: Secret key for webhook registration.
  parameters:
    AirmeetId:
      name: airmeetId
      in: path
      required: true
      schema: { type: string }
      description: Airmeet (event) identifier.
    SessionId:
      name: sessionId
      in: path
      required: true
      schema: { type: string }
      description: Session identifier.
  responses:
    Success:
      description: Successful response.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Envelope' }
    AsyncAccepted:
      description: Asynchronous job accepted; poll the returned reference for data.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Envelope' }
    BadRequest:
      description: Bad request.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Error' }
    Unauthorized:
      description: Missing or invalid credentials/token.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Error' }
    PreconditionFailed:
      description: Precondition failed (e.g. data not yet available).
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Error' }
    ServerError:
      description: Internal server error.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Error' }
  schemas:
    Envelope:
      type: object
      properties:
        success: { type: boolean }
        data: {}
    Error:
      type: object
      properties:
        success: { type: boolean, example: false }
        message: { type: string }
        error: { type: string }
    AttendeeCreate:
      type: object
      required: [email, firstName, lastName]
      properties:
        email: { type: string, format: email }
        firstName: { type: string }
        lastName: { type: string }
        attendance_type: { type: string, enum: [IN-PERSON, VIRTUAL], description: For hybrid events. }
        city: { type: string }
        country: { type: string }
        designation: { type: string }
        organisation: { type: string }
        registerAttendee: { type: boolean, default: false }
        sendEmailInvite: { type: boolean, default: true }
        customFieldMapping:
          type: array
          items:
            type: object
            properties:
              fieldId: { type: string }
              value: { type: string }
    AirmeetCreate:
      type: object
      required: [hostEmail, eventName]
      properties:
        hostEmail: { type: string, format: email }
        eventName: { type: string }
        shortDesc: { type: string }
        startTime: { type: string }
        endTime: { type: string }
        timezone: { type: string }
        accessType: { type: string }
        eventType: { type: string }
        venueTitle: { type: string }
        registrationApprovalRequired: { type: boolean }
        venueCapacity: { type: integer }
    SpeakerCreate:
      type: object
      required: [name, email]
      properties:
        name: { type: string }
        email: { type: string, format: email }
        organisation: { type: string }
        designation: { type: string }
        imageUrl: { type: string }
        bio: { type: string }
        city: { type: string }
        country: { type: string }
    SessionCreate:
      type: object
      required: [sessionTitle, sessionStartTime]
      properties:
        sessionTitle: { type: string }
        sessionStartTime: { type: string }
        sessionDuration: { type: integer }
        hostEmail: { type: string, format: email }
        speakerEmails: { type: array, items: { type: string } }
        cohostEmails: { type: array, items: { type: string } }
        type: { type: string }
        tracks: { type: array, items: { type: string } }
        tags: { type: array, items: { type: string } }
        boothId: { type: string }
        speedNetworkingData: { type: object }
        sessionMeta: { type: object }
    BoothCreate:
      type: object
      required: [name]
      properties:
        name: { type: string }
        exhibitors: { type: array, items: { type: string } }
        tags: { type: array, items: { type: string } }
        metaData:
          type: object
          properties:
            chatEnabled: { type: boolean }
            loungeEnabled: { type: boolean }
            broadcastEnabled: { type: boolean }
            tableCount: { type: integer }
        exhibitorInfo: { type: object }