Virtuagym Events API

Club events (classes) and event participants (bookings).

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/virtuagym-events-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

virtuagym-events-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Virtuagym Public API (v1) Billing Events API
  description: 'The Virtuagym Public API lets fitness businesses, health clubs, and partner integrations read and write club data programmatically - members, staff (employees), membership definitions and instances, member credits, invoices, visits (check-ins), events (classes) and their participants, and coaching workout assignments. This document models the current v1 club-scoped surface.

    Access model: Virtuagym''s authoritative reference documentation is access-gated - you request access by emailing api@virtuagym.com with your GitHub username, and you provision an API key and Club secret in the Virtuagym portal under System settings > Business info > Advanced. The endpoints, methods, and query parameters below are grounded in Virtuagym''s publicly mirrored API wiki and in live host probes; request/response bodies are modeled honestly and marked with additionalProperties where the full field set is not published. Treat schema shapes as a starting point and reconcile against the official reference once access is granted.

    Authentication: v1 endpoints authenticate with an `api_key` and a `club_secret`, both passed as query-string parameters, over HTTPS only. (Legacy v0 endpoints used HTTP Basic Auth and are deprecated; a separate OAuth 2.0 flow exists for end-user-context calls and is out of scope for the club-scoped v1 surface modeled here.)'
  version: '1.0'
  contact:
    name: Virtuagym API Team
    url: https://support.virtuagym.com/s/article/API-Link-To-Your-Website
    email: api@virtuagym.com
  license:
    name: Proprietary
    url: https://virtuagym.com
servers:
- url: https://api.virtuagym.com/api
  description: Virtuagym Public API
security:
- apiKeyAuth: []
  clubSecretAuth: []
tags:
- name: Events
  description: Club events (classes) and event participants (bookings).
paths:
  /v1/club/{club_id}/events:
    parameters:
    - $ref: '#/components/parameters/ClubId'
    get:
      operationId: listEvents
      tags:
      - Events
      summary: List club events
      description: Returns club events (scheduled classes / sessions). Filterable by schedule, member, and a start/end timestamp window.
      parameters:
      - $ref: '#/components/parameters/SyncFrom'
      - name: schedule_id
        in: query
        required: false
        schema:
          type: integer
      - name: timestamp_start
        in: query
        required: false
        description: Unix timestamp (seconds) lower bound of the event window.
        schema:
          type: integer
      - name: timestamp_end
        in: query
        required: false
        description: Unix timestamp (seconds) upper bound of the event window.
        schema:
          type: integer
      - name: member_id
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: A list of events.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/club/{club_id}/events/{event_id}:
    parameters:
    - $ref: '#/components/parameters/ClubId'
    - name: event_id
      in: path
      required: true
      description: The event ID.
      schema:
        type: integer
    get:
      operationId: getEvent
      tags:
      - Events
      summary: Retrieve an event
      description: Returns the event resource that corresponds to `event_id`.
      parameters:
      - $ref: '#/components/parameters/SyncFrom'
      responses:
        '200':
          description: The requested event.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/club/{club_id}/eventparticipants:
    parameters:
    - $ref: '#/components/parameters/ClubId'
    get:
      operationId: listEventParticipants
      tags:
      - Events
      summary: List event participants
      description: Returns participants (bookings) for events, filterable by `event_id` and `sync_from`.
      parameters:
      - name: event_id
        in: query
        required: false
        schema:
          type: integer
      - $ref: '#/components/parameters/SyncFrom'
      responses:
        '200':
          description: A list of event participants.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createEventParticipant
      tags:
      - Events
      summary: Add an event participant
      description: Books a member into an event (creates an event participant).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventParticipantInput'
      responses:
        '200':
          description: The created event participant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: updateEventParticipant
      tags:
      - Events
      summary: Update an event participant
      description: Updates an existing event participant (booking).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventParticipantInput'
      responses:
        '200':
          description: The updated event participant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/club/{club_id}/eventparticipants/{event_participant_id}:
    parameters:
    - $ref: '#/components/parameters/ClubId'
    - name: event_participant_id
      in: path
      required: true
      description: The event participant ID.
      schema:
        type: integer
    get:
      operationId: getEventParticipant
      tags:
      - Events
      summary: Retrieve an event participant
      description: Returns the event participant that corresponds to the given ID.
      responses:
        '200':
          description: The requested event participant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteEventParticipant
      tags:
      - Events
      summary: Remove an event participant
      description: Cancels a booking by deleting the event participant.
      responses:
        '200':
          description: Deletion confirmation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  responses:
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing or invalid api_key / club_secret.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    GenericResponse:
      type: object
      description: Standard Virtuagym envelope. The `result` object carries the resource; exact fields depend on the resource and are additive.
      properties:
        statusMessage:
          type: string
        statistics:
          $ref: '#/components/schemas/Statistics'
        result:
          type: object
          additionalProperties: true
      additionalProperties: true
    GenericListResponse:
      type: object
      description: Standard Virtuagym envelope wrapping an array of resources in `result`.
      properties:
        statusMessage:
          type: string
        statistics:
          $ref: '#/components/schemas/Statistics'
        result:
          type: array
          items:
            type: object
            additionalProperties: true
      additionalProperties: true
    EventParticipantInput:
      type: object
      properties:
        event_id:
          type: integer
        member_id:
          type: integer
        status:
          type: string
      additionalProperties: true
    Statistics:
      type: object
      description: Response metadata Virtuagym returns alongside result sets.
      properties:
        resultset_size:
          type: integer
        total_results:
          type: integer
        time_ms:
          type: integer
      additionalProperties: true
    Error:
      type: object
      properties:
        status:
          type: integer
        statusMessage:
          type: string
        result:
          type: object
          additionalProperties: true
      additionalProperties: true
  parameters:
    ClubId:
      name: club_id
      in: path
      required: true
      description: The Virtuagym club ID.
      schema:
        type: integer
    SyncFrom:
      name: sync_from
      in: query
      required: false
      description: Return only resources created or edited since this Unix timestamp in milliseconds.
      schema:
        type: integer
        format: int64
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: query
      name: api_key
      description: The club's API key, provisioned in the Virtuagym portal under System settings > Business info > Advanced.
    clubSecretAuth:
      type: apiKey
      in: query
      name: club_secret
      description: The club secret, provisioned alongside the API key in the Virtuagym portal. Required for all v1 endpoints.