PushPress Invitations API

Create, list, retrieve, and delete invitations for members or staff to join a gym on PushPress.

OpenAPI Specification

pushpress-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: PushPress Platform API
  description: >-
    The PushPress Platform API lets developers integrate with the PushPress gym
    and fitness business management platform. It exposes gym members
    (customers), check-ins (class, appointment, event, and open-facility),
    appointments, classes and class types, events, plan enrollments, membership
    plans, company details, staff/member invitations, transactional messaging
    (email, SMS, push, notifications), API key management, and platform webhook
    subscriptions for real-time events.


    All requests are REST over HTTPS. Every request is authenticated with an API
    key passed in the `API-KEY` header, and is scoped to a single gym location
    (company) by the `company-id` header.


    Endpoint PATHS and HTTP METHODS in this document are grounded in PushPress's
    live public API reference and the official Speakeasy-generated PushPress SDK
    (`@pushpress/pushpress`, production server `https://api.pushpress.com/v3`).
    Request and response SCHEMAS are modeled by API Evangelist to a reasonable
    fidelity and should be verified against the authoritative PushPress OpenAPI
    before code generation.
  version: '3.0'
  contact:
    name: PushPress
    url: https://www.pushpress.com
  x-grounding:
    pathsAndMethods: confirmed
    schemas: modeled
    sources:
      - https://ppe.apidocumentation.com/
      - https://github.com/PushPress/pushpress-ts
      - https://www.npmjs.com/package/@pushpress/pushpress
servers:
  - url: https://api.pushpress.com/v3
    description: Production
  - url: https://api.pushpressstage.com/v3
    description: Staging
  - url: https://api.pushpressdev.com/v3
    description: Development
security:
  - api_key: []
tags:
  - name: Company
    description: The gym / business (company) the API key is scoped to.
  - name: Customers
    description: Gym members and leads (customers).
  - name: Attributions
    description: Marketing / lead-source attributions for a customer.
  - name: Checkins
    description: Class, appointment, event, and open-facility check-ins.
  - name: Appointments
    description: Scheduled one-on-one or small-group appointments.
  - name: Classes
    description: Scheduled classes and class types.
  - name: Events
    description: Gym events (workshops, competitions, socials).
  - name: Enrollments
    description: Customer enrollments in membership plans.
  - name: Plans
    description: Membership and billing plans offered by the gym.
  - name: Invitations
    description: Invitations for members or staff to join the gym on PushPress.
  - name: Messages
    description: Transactional email, SMS, push, and in-app notifications.
  - name: ApiKeys
    description: Programmatic API key management.
  - name: Webhooks
    description: Platform webhook subscriptions for real-time events.
paths:
  /company:
    get:
      operationId: getCompany
      tags:
        - Company
      summary: Get company details
      description: Retrieves details for the company (gym) the API key is scoped to.
      responses:
        '200':
          description: The company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers:
    get:
      operationId: listCustomers
      tags:
        - Customers
      summary: List customers
      description: Lists customers (members and leads) for the company, with pagination.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: A page of customers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCustomer
      tags:
        - Customers
      summary: Create a new customer
      description: Creates a new customer (member or lead) for the company.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerInput'
      responses:
        '200':
          description: The created customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /customers/{uuid}:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getCustomer
      tags:
        - Customers
      summary: Get customer details
      description: Retrieves a single customer by UUID.
      responses:
        '200':
          description: The requested customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /attributions/attributions:
    get:
      operationId: listAttributions
      tags:
        - Attributions
      summary: List customer attributions
      description: Lists lead-source / marketing attributions for customers.
      responses:
        '200':
          description: A list of attributions.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Attribution'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createAttribution
      tags:
        - Attributions
      summary: Create a customer attribution
      description: Creates a lead-source / marketing attribution for a customer.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AttributionInput'
      responses:
        '200':
          description: The created attribution.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attribution'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /attributions/attributions/{uuid}:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getAttribution
      tags:
        - Attributions
      summary: Get a customer attribution
      description: Retrieves a single customer attribution by UUID.
      responses:
        '200':
          description: The requested attribution.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attribution'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /checkins/count:
    get:
      operationId: getCheckinCount
      tags:
        - Checkins
      summary: Get check-in count
      description: Returns the number of check-ins matching the supplied filters.
      parameters:
        - name: since
          in: query
          required: false
          description: Unix timestamp (ms) lower bound for the count window.
          schema:
            type: integer
            format: int64
        - name: until
          in: query
          required: false
          description: Unix timestamp (ms) upper bound for the count window.
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: The check-in count.
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
        '401':
          $ref: '#/components/responses/Unauthorized'
  /checkins/class:
    get:
      operationId: listClassCheckins
      tags:
        - Checkins
      summary: List class check-ins
      description: Lists check-ins associated with scheduled classes.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: A page of class check-ins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckinList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /checkins/class/{uuid}:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getClassCheckin
      tags:
        - Checkins
      summary: Get class check-in details
      description: Retrieves a single class check-in by UUID.
      responses:
        '200':
          description: The requested check-in.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Checkin'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /checkins/appointment:
    get:
      operationId: listAppointmentCheckins
      tags:
        - Checkins
      summary: List appointment check-ins
      description: Lists check-ins associated with appointments.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: A page of appointment check-ins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckinList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /checkins/appointment/{uuid}:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getAppointmentCheckin
      tags:
        - Checkins
      summary: Get appointment check-in details
      description: Retrieves a single appointment check-in by UUID.
      responses:
        '200':
          description: The requested check-in.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Checkin'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /checkins/event:
    get:
      operationId: listEventCheckins
      tags:
        - Checkins
      summary: List event check-ins
      description: Lists check-ins associated with events.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: A page of event check-ins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckinList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /checkins/event/{uuid}:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getEventCheckin
      tags:
        - Checkins
      summary: Get event check-in details
      description: Retrieves a single event check-in by UUID.
      responses:
        '200':
          description: The requested check-in.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Checkin'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /checkins/open:
    get:
      operationId: listOpenCheckins
      tags:
        - Checkins
      summary: List open-facility check-ins
      description: Lists open-gym / open-facility check-ins not tied to a class, appointment, or event.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: A page of open check-ins.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckinList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /checkins/open/{uuid}:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getOpenCheckin
      tags:
        - Checkins
      summary: Get open-facility check-in details
      description: Retrieves a single open-facility check-in by UUID.
      responses:
        '200':
          description: The requested check-in.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Checkin'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /appts/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getAppointment
      tags:
        - Appointments
      summary: Get details for an appointment
      description: Retrieves a single appointment by ID.
      responses:
        '200':
          description: The requested appointment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /classes/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getClass
      tags:
        - Classes
      summary: Get details for a class
      description: Retrieves a single scheduled class by ID.
      responses:
        '200':
          description: The requested class.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Class'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /classes/types:
    get:
      operationId: listClassTypes
      tags:
        - Classes
      summary: List class types
      description: Lists the class types offered by the gym.
      responses:
        '200':
          description: A list of class types.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClassType'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /classes/types/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getClassType
      tags:
        - Classes
      summary: Get a class type
      description: Retrieves a single class type by ID.
      responses:
        '200':
          description: The requested class type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /events:
    get:
      operationId: listEvents
      tags:
        - Events
      summary: List events
      description: Lists gym events, with pagination.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: A page of events.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Event'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /events/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getEvent
      tags:
        - Events
      summary: Get details for an event
      description: Retrieves a single event by ID.
      responses:
        '200':
          description: The requested event.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Event'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /enrollments:
    get:
      operationId: listEnrollments
      tags:
        - Enrollments
      summary: List plan enrollments
      description: Lists customer enrollments in membership plans, with pagination.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: A page of enrollments.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Enrollment'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /enrollments/{uuid}:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getEnrollment
      tags:
        - Enrollments
      summary: Get plan enrollment details
      description: Retrieves a single plan enrollment by UUID.
      responses:
        '200':
          description: The requested enrollment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Enrollment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /plans/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getPlan
      tags:
        - Plans
      summary: Get plan details
      description: Retrieves a single membership / billing plan by ID.
      responses:
        '200':
          description: The requested plan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Plan'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /invitations:
    get:
      operationId: listInvitations
      tags:
        - Invitations
      summary: List invitations
      description: Lists outstanding invitations for the company.
      responses:
        '200':
          description: A list of invitations.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Invitation'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createInvitations
      tags:
        - Invitations
      summary: Create invitations
      description: Creates one or more invitations for members or staff to join the gym.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvitationInput'
      responses:
        '200':
          description: The created invitation(s).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invitation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /invitations/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getInvitation
      tags:
        - Invitations
      summary: Get an invitation
      description: Retrieves a single invitation by ID.
      responses:
        '200':
          description: The requested invitation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invitation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteInvitation
      tags:
        - Invitations
      summary: Delete an invitation
      description: Deletes (revokes) an invitation.
      responses:
        '200':
          description: Deletion confirmation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /messages/email/send:
    post:
      operationId: sendEmail
      tags:
        - Messages
      summary: Send an email
      description: Sends a transactional email to a customer.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailMessageInput'
      responses:
        '200':
          description: Send result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /messages/sms/send:
    post:
      operationId: sendSms
      tags:
        - Messages
      summary: Send an SMS
      description: Sends a transactional SMS to a customer.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SmsMessageInput'
      responses:
        '200':
          description: Send result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /messages/push/send:
    post:
      operationId: sendPush
      tags:
        - Messages
      summary: Send a push notification
      description: Sends a push notification to a customer's member app.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PushMessageInput'
      responses:
        '200':
          description: Send result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /messages/notification/send:
    post:
      operationId: sendNotification
      tags:
        - Messages
      summary: Send a notification
      description: >-
        Sends an in-app / realtime notification. First-party apps can publish
        realtime events to an Ably channel through this endpoint. This is a
        REST request that hands off to Ably; PushPress does not expose its own
        WebSocket endpoint to API consumers.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationInput'
      responses:
        '200':
          description: Send result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /keys:
    get:
      operationId: listApiKeys
      tags:
        - ApiKeys
      summary: List API keys
      description: Lists the API keys for the company.
      responses:
        '200':
          description: A list of API keys.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApiKey'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createApiKey
      tags:
        - ApiKeys
      summary: Create a new API key
      description: Creates a new API key for the company.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiKeyInput'
      responses:
        '200':
          description: The created API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKey'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /keys/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getApiKey
      tags:
        - ApiKeys
      summary: Get API key
      description: Retrieves a single API key by ID.
      responses:
        '200':
          description: The requested API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKey'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /keys/{id}/revoke:
    parameters:
      - $ref: '#/components/parameters/Id'
    patch:
      operationId: revokeApiKey
      tags:
        - ApiKeys
      summary: Revoke an API key
      description: Revokes an API key so it can no longer be used.
      responses:
        '200':
          description: The revoked API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKey'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /webhooks:
    get:
      operationId: listWebhooks
      tags:
        - Webhooks
      summary: List webhooks
      description: Lists platform webhooks for the company, including signing secret and event subscriptions.
      responses:
        '200':
          description: A list of webhooks.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createWebhook
      tags:
        - Webhooks
      summary: Create a webhook
      description: >-
        Creates a platform webhook that listens for events on the PushPress
        platform and delivers them to a target URL.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookInput'
      responses:
        '200':
          description: The created webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /webhooks/{uuid}:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    get:
      operationId: getWebhook
      tags:
        - Webhooks
      summary: Get webhook details
      description: Retrieves a single webhook by UUID, including signing secret and event subscriptions.
      responses:
        '200':
          description: The requested webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateWebhook
      tags:
        - Webhooks
      summary: Update a webhook
      description: Updates a webhook's target URL or event subscriptions.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookInput'
      responses:
        '200':
          description: The updated webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteWebhook
      tags:
        - Webhooks
      summary: Delete a webhook
      description: Deletes a webhook subscription.
      responses:
        '200':
          description: Deletion confirmation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /webhooks/{uuid}/activate:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    patch:
      operationId: activateWebhook
      tags:
        - Webhooks
      summary: Activate a webhook
      description: Activates a previously deactivated webhook.
      responses:
        '200':
          description: The activated webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /webhooks/{uuid}/deactivate:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    patch:
      operationId: deactivateWebhook
      tags:
        - Webhooks
      summary: Deactivate a webhook
      description: Deactivates a webhook without deleting it.
      responses:
        '200':
          description: The deactivated webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /webhooks/{uuid}/rotate-signing-secret:
    parameters:
      - $ref: '#/components/parameters/Uuid'
    post:
      operationId: rotateWebhookSecret
      tags:
        - Webhooks
      summary: Rotate a webhook signing secret
      description: Rotates the signing secret used to verify webhook payload signatures.
      responses:
        '200':
          description: The webhook with its new signing secret.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  securitySchemes:
    api_key:
      type: apiKey
      in: header
      name: API-KEY
      description: >-
        API key issued in the PushPress developer portal, passed in the
        `API-KEY` request header. Requests are also scoped to a single gym
        location with a `company-id` header.
  parameters:
    Uuid:
      name: uuid
      in: path
      required: true
      description: The UUID of the resource.
      schema:
        type: string
    Id:
      name: id
      in: path
      required: true
      description: The identifier of the resource.
      schema:
        type: string
    Limit:
      name: limit
      in: query
      required: false
      description: Maximum number of records to return.
      schema:
        type: integer
        default: 20
    Offset:
      name: offset
      in: query
      required: false
      description: Number of records to skip for pagination.
      schema:
        type: integer
        default: 0
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The r

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pushpress/refs/heads/main/openapi/pushpress-openapi.yml