Demio Events API

Events, Event Sessions (Dates) and attendee registration. List and read Events, read a specific Session, and register a person for an Event to receive their unique join link.

OpenAPI Specification

demio-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Public Demio API
  version: v1
  description: >-
    Public REST API for Demio, the webinar and virtual-event platform operated by
    Banzai International. The API exposes the Event, Event Session (Date),
    registration and participant-reporting surface: list and read Events, read a
    specific Event Session, register a person for an Event and receive their unique
    join link, and pull the participant/attendance report for a Session. Every
    request is authorized with an account API Key and API Secret, supplied either as
    `Api-Key` / `Api-Secret` request headers or as `api_key` / `api_secret` query
    string parameters. Keys are managed in the Demio Settings > API area.


    Provenance: this document is a faithful format conversion of the API Blueprint
    that Demio publishes at https://publicdemioapi.docs.apiary.io (blueprint source
    https://jsapi.apiary.io/apis/publicdemioapi.apib, Apiary owner "Demio"). No
    operation, parameter, response or field has been added that is not documented in
    that blueprint. Descriptions, rate limits and error semantics are drawn from the
    Demio Help Center. Live behaviour of `GET /ping` was re-verified on 2026-08-12
    (HTTP 401 `{"pong":false,"messages":["Authorization failed"]}` without credentials),
    and the blueprint fetched on 2026-08-12 is byte-identical to the copy harvested on
    2026-08-06.
  contact:
    name: Demio Support
    email: support@demio.com
    url: https://help.demio.com/en/
  termsOfService: https://www.demio.com/terms-and-conditions
  x-source-format: API Blueprint 1A
  x-source-url: https://jsapi.apiary.io/apis/publicdemioapi.apib
  x-source-last-updated: '2022-04-19'
  x-provenance: >-
    Derived by API Evangelist from the provider-published API Blueprint. Not an
    official Demio OpenAPI document.
externalDocs:
  description: Public Demio API documentation (Apiary)
  url: https://publicdemioapi.docs.apiary.io
servers:
  - url: https://my.demio.com/api/v1
    description: Production
tags:
  - name: Intro
    description: Authorization checks.
  - name: Events
    description: Events, Event Sessions (Dates) and registration.
  - name: Reports
    description: Participation and attendance reporting.
security:
  - ApiKeyHeader: []
    ApiSecretHeader: []
paths:
  /ping:
    get:
      tags: [Intro]
      operationId: pingViaHeaders
      summary: Ping via headers
      description: >-
        Verifies authorization using the `Api-Key` and `Api-Secret` request headers.
        Returns whether the credentials resolve and whether they are sandbox
        credentials.
      security:
        - ApiKeyHeader: []
          ApiSecretHeader: []
      responses:
        '200':
          description: Authorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pong'
              example:
                pong: true
                sandbox: true
        '401':
          description: Authorization failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PingError'
              example:
                pong: false
                messages: [Authorization failed]
        '403':
          description: Account is not active
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PingError'
              example:
                pong: false
                messages: [Account is not active]
  /ping/query:
    get:
      tags: [Intro]
      operationId: pingViaQuery
      summary: Ping via query string
      description: >-
        Verifies authorization using the `api_key` and `api_secret` query string
        parameters.
      security:
        - ApiKeyQuery: []
          ApiSecretQuery: []
      parameters:
        - name: api_key
          in: query
          required: true
          description: Api Key
          schema:
            type: string
        - name: api_secret
          in: query
          required: true
          description: Api Secret
          schema:
            type: string
      responses:
        '200':
          description: Authorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pong'
              example:
                pong: true
        '401':
          description: Authorization failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PingError'
        '403':
          description: Account is not active
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PingError'
  /events:
    get:
      tags: [Events]
      operationId: listEvents
      summary: Events list
      description: >-
        Returns active (not canceled) Events grouped by Event ID and ordered by
        scheduled date/time (next upcoming session). Use the `type` query parameter
        to filter to upcoming, past or automated Events.
      parameters:
        - name: type
          in: query
          required: false
          description: Filter events by type
          schema:
            type: string
            enum: [upcoming, past, automated]
      responses:
        '200':
          description: A list of Events
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EventSummary'
              example:
                - id: 62
                  name: First Webinar
                  description: First Webinar description
                  date_id: 1218
                  status: running
                  timestamp: 1456723800
                  zone: Europe/Kiev
                  registration_url: https://my.demio.com/ref/FKXeiDqyQsRYbfiv
                  automated:
                    ready: true
                    duration: 3620
                - id: 45
                  name: Second Webinar
                  description: Second Webinar description
                  date_id: 1196
                  status: scheduled
                  timestamp: 1456765200
                  zone: America/New_York
                  registration_url: https://my.demio.com/ref/pgRzWQhYLPmuboOA
                  automated: null
  /event/{id}:
    get:
      tags: [Events]
      operationId: getEvent
      summary: Event info
      description: >-
        Returns information about a specific Event with the full list of Event
        Sessions (Dates), ordered by scheduled date/time.
      parameters:
        - name: id
          in: path
          required: true
          description: Event ID
          schema:
            type: integer
        - name: active
          in: query
          required: false
          description: Return only active dates in series
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: The Event
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Event'
        '404':
          description: Event not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                messages: [Event not found]
  /event/{id}/date/{date_id}:
    get:
      tags: [Events]
      operationId: getEventSession
      summary: Event Session info
      description: Returns information about a specific Event Session (Date).
      parameters:
        - name: id
          in: path
          required: true
          description: Event ID
          schema:
            type: integer
        - name: date_id
          in: path
          required: true
          description: Event Date ID
          schema:
            type: integer
      responses:
        '200':
          description: The Event Session
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventDate'
              example:
                date_id: 1218
                status: scheduled
                timestamp: 1456723800
                datetime: March 26th, 2016 at 8:00PM EET
                zone: Europe/Kiev
        '404':
          description: Event Date not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                messages: [Event Date not found]
  /event/register:
    put:
      tags: [Events]
      operationId: registerForEvent
      summary: Register
      description: >-
        Registers someone for an Event and returns the unique join link for that
        person. Request attributes are automatically filtered; registration form
        field data may be passed in the request body. Custom fields are keyed by the
        field's Unique Identifier as configured in the Event's Registration block.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegistrationRequest'
            examples:
              byEventId:
                summary: Register by Event ID
                value:
                  id: 1
                  ref_url: null
                  date_id: 35
                  name: John Doe
                  email: john.doe@gmail.com
              byRefUrl:
                summary: Register by registration page URL
                value:
                  id: null
                  ref_url: https://my.demio.com/ref/7Ka0Ti56GdIWcfFR
                  date_id: null
                  name: John
                  email: john.doe@gmail.com
                  last_name: Doe
                  website: https://demio.com
                  phone: +1-222-333-4455
      responses:
        '201':
          description: Registered
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Registration'
              example:
                hash: fPaSYijVHXI6ZJgE
                join_link: https://event.demio.com/join/fPaSYijVHXI6ZJgE
        '400':
          description: Validation failed or malformed request body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                validation:
                  value:
                    messages:
                      - Name must be more than 2 symbols
                      - Wrong Email format
                syntax:
                  value:
                    messages:
                      - Bad Request syntax. Try to check request Body data JSON format.
  /report/{date_id}/participants:
    get:
      tags: [Reports]
      operationId: listSessionParticipants
      summary: Event Date participants
      description: >-
        Returns the participant list for an Event Session (Date). Use the `status`
        query parameter to filter results by participation status.
      parameters:
        - name: date_id
          in: path
          required: true
          description: Event Date ID
          schema:
            type: integer
        - name: status
          in: query
          required: false
          description: Filter results by participation status
          schema:
            type: string
            enum: [attended, did not attend, completed, left early, banned]
      responses:
        '200':
          description: Participants for the Session
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParticipantList'
              example:
                participants:
                  - email: john.doe@gmail.com
                    name: John
                    custom_fields:
                      - id: last_name
                        name: Last Name
                        value: Doe
                      - id: website
                        name: Website
                        value: https://demio.com
                    attended: true
                    status: completed
                  - email: jane.doe@gmail.com
                    name: Jane Doe
                    custom_fields: []
                    attended: false
                    status: did not attend
components:
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: Api-Key
      description: Account API Key, from Demio Settings > API.
    ApiSecretHeader:
      type: apiKey
      in: header
      name: Api-Secret
      description: Account API Secret, from Demio Settings > API.
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api_key
      description: Account API Key supplied on the query string.
    ApiSecretQuery:
      type: apiKey
      in: query
      name: api_secret
      description: Account API Secret supplied on the query string.
  schemas:
    Pong:
      type: object
      required: [pong]
      properties:
        pong:
          type: boolean
          description: Pong result
        sandbox:
          type: boolean
          description: True when sandbox key/secret were used
    PingError:
      type: object
      properties:
        pong:
          type: boolean
        messages:
          type: array
          items:
            type: string
    Error:
      type: object
      properties:
        messages:
          type: array
          description: Human readable error messages
          items:
            type: string
    Automated:
      type: object
      nullable: true
      description: Present when the Event is automated
      properties:
        duration:
          type: number
          description: Video duration in seconds
        ready:
          type: boolean
          description: Video is ready to be played
    EventSummary:
      type: object
      required: [id, name, date_id, status, timestamp, zone, registration_url]
      properties:
        id:
          type: number
          description: Event ID
        name:
          type: string
          description: Event name
        description:
          type: string
          description: Event description
        date_id:
          type: number
          description: Event Date ID
        status:
          type: string
          description: Event Date status
        timestamp:
          type: number
          description: Scheduled date/time of the Event Date, Unix timestamp
        zone:
          type: string
          description: Scheduled timezone of the Event Date
        registration_url:
          type: string
          description: Humanized Event registration page URL
        automated:
          $ref: '#/components/schemas/Automated'
    EventDate:
      type: object
      properties:
        date_id:
          type: number
          description: Event Date identifier
        status:
          type: string
          description: Status
        timestamp:
          type: number
          description: Unix timestamp
        datetime:
          type: string
          description: Human friendly date/time string
        zone:
          type: string
          description: Timezone
    Event:
      type: object
      properties:
        id:
          type: number
          description: Event ID
        name:
          type: string
          description: Event name
        description:
          type: string
          description: Event description
        registrants_stay_registered:
          type: boolean
          description: Keep Registrants registered through the series
        registration_url:
          type: string
          description: Humanized Event registration page URL
        next_date_id:
          type: number
          description: Next available (running or scheduled) Event Date ID
        automated:
          $ref: '#/components/schemas/Automated'
        dates:
          type: array
          description: All (scheduled, running, finished) Event Dates
          items:
            $ref: '#/components/schemas/EventDate'
    RegistrationRequest:
      type: object
      required: [name, email]
      additionalProperties: true
      description: >-
        Registration payload. Additional properties are treated as custom form
        fields, keyed by the field's Unique Identifier.
      properties:
        id:
          type: number
          nullable: true
          description: Event ID
        ref_url:
          type: string
          nullable: true
          description: >-
            Event registration page URL. Useful when the Event ID is unknown but the
            Event link is known.
        date_id:
          type: number
          nullable: true
          description: >-
            Event Date ID. When omitted the nearest active Date is used.
        name:
          type: string
          description: The registrant's first name
        email:
          type: string
          format: email
          description: The registrant's email address
        last_name:
          type: string
          description: Value for the predefined Last Name field
        company:
          type: string
          description: Value for the predefined Company field
        website:
          type: string
          description: Value for the predefined Website field
        phone_number:
          type: string
          description: Value for the predefined Phone Number field
        gdpr:
          type: string
          description: Value for the predefined GDPR field
    Registration:
      type: object
      properties:
        hash:
          type: string
          description: Unique Attendee hash used to join the webinar
        join_link:
          type: string
          description: Link to join the webinar
    ParticipantCustomField:
      type: object
      properties:
        id:
          type: string
          description: Field identifier
        name:
          type: string
          description: Field name
        value:
          type: string
          description: Field value
    Participant:
      type: object
      properties:
        email:
          type: string
          description: Email
        name:
          type: string
          description: Name
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/ParticipantCustomField'
        attended:
          type: boolean
          description: Participant attended the webinar
        status:
          type: string
          description: Participation status
          enum: [completed, did not attend, left early, banned]
    ParticipantList:
      type: object
      properties:
        participants:
          type: array
          items:
            $ref: '#/components/schemas/Participant'