Classy Fundraising Pages API

Retrieve, update, and delete individual peer-to-peer fundraising pages created under a campaign, including their overview/progress stats, posts, updates, stories, feed items, and soft credits.

OpenAPI Specification

classy-org-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Classy API (GoFundMe Pro)
  description: >-
    The Classy API is a resource-oriented REST API for the Classy online
    fundraising platform (rebranding to GoFundMe Pro). It exposes
    Organizations, Campaigns, Fundraising Pages, Fundraising Teams,
    Transactions, Recurring Donation Plans, Members, Supporters, and
    Designations, among other resources, under a versioned base path
    (https://api.classy.org/2.0). Authentication uses OAuth2 client
    credentials: POST client_id/client_secret/grant_type as a JSON body to
    /oauth2/auth to receive a Bearer access_token. List endpoints return a
    Laravel-style pagination envelope (current_page, data, per_page, total,
    next_page_url, etc.) and support a `with` query parameter to eager-load
    related sub-resources (for example ?with=items or
    ?with=source_tracking_codes). This document models the endpoints
    confirmed against the official classy-org/classy-node resource map and
    the official classy-org/postman-collections examples; the full resource
    surface is broader (52+ resource types) and is documented in full only
    behind Classy/GoFundMe Pro developer credentials.
    Endpoint coverage: endpointsConfirmed - a curated set of the most-used
    endpoints across Organizations, Campaigns, Fundraising Pages,
    Fundraising Teams, Transactions, Recurring Donation Plans, Members,
    Supporters, and Designations, grounded in classy-org/classy-node's
    src/resources.json and classy-org/postman-collections examples.
    endpointsModeled - request/response shapes for those endpoints, inferred
    from the Postman collection example bodies (field names, types, and the
    pagination envelope) since Classy does not publish a machine-readable
    OpenAPI/Swagger document.
  version: '2.0'
  contact:
    name: Classy (GoFundMe Pro)
    url: https://www.classy.org
servers:
  - url: https://api.classy.org/2.0
    description: Classy / GoFundMe Pro production API
security:
  - bearerAuth: []
tags:
  - name: Authentication
    description: OAuth2 client credentials token exchange.
  - name: Organizations
    description: Nonprofit organization records and their nested collections.
  - name: Campaigns
    description: Donation forms, peer-to-peer, crowdfunding, and event campaigns.
  - name: Fundraising Pages
    description: Individual peer-to-peer fundraising pages under a campaign.
  - name: Fundraising Teams
    description: Teams and subteams of fundraising pages under a campaign.
  - name: Transactions
    description: Donations, ticket, and merchandise order transactions.
  - name: Recurring Donation Plans
    description: Sustainer / recurring donation subscriptions.
  - name: Members
    description: The account behind a fundraiser, admin, or donor.
  - name: Supporters
    description: Donor / CRM profile per organization.
  - name: Designations
    description: Funds or programs donors can direct gifts toward.
paths:
  /oauth2/auth:
    post:
      operationId: authenticate
      tags:
        - Authentication
      summary: Exchange client credentials for an access token
      description: >-
        Exchanges a client_id and client_secret for a Bearer access token
        using the client_credentials grant. Tokens expire after expires_in
        seconds and must be refreshed by calling this endpoint again.
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AuthRequest'
      responses:
        '200':
          description: A new access token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthResponse'
        '400':
          description: Missing or invalid client_id / client_secret.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /organizations/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getOrganization
      tags:
        - Organizations
      summary: Retrieve an organization
      responses:
        '200':
          description: The requested organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organization'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /organizations/{id}/campaigns:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: listOrganizationCampaigns
      tags:
        - Organizations
      summary: List an organization's campaigns
      responses:
        '200':
          description: A paginated list of campaigns.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createOrganizationCampaign
      tags:
        - Organizations
      summary: Create a campaign for an organization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignInput'
      responses:
        '200':
          description: The created campaign.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /organizations/{id}/designations:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listOrganizationDesignations
      tags:
        - Organizations
      summary: List an organization's designations
      responses:
        '200':
          description: A paginated list of designations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DesignationPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createOrganizationDesignation
      tags:
        - Organizations
      summary: Create a designation for an organization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DesignationInput'
      responses:
        '200':
          description: The created designation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Designation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /organizations/{id}/fundraising-pages:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: listOrganizationFundraisingPages
      tags:
        - Organizations
      summary: List an organization's fundraising pages
      responses:
        '200':
          description: A paginated list of fundraising pages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingPagePage'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /organizations/{id}/supporters:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listOrganizationSupporters
      tags:
        - Organizations
      summary: List an organization's supporters
      responses:
        '200':
          description: A paginated list of supporters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupporterPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createOrganizationSupporter
      tags:
        - Organizations
      summary: Create a supporter for an organization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupporterInput'
      responses:
        '200':
          description: The created supporter.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supporter'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /organizations/{id}/transactions:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: listOrganizationTransactions
      tags:
        - Organizations
      summary: List an organization's transactions
      description: >-
        Supports ?with=items to eager-load transaction line items, matching
        the official "Fetch Multi-Item Order" Postman collection example.
      responses:
        '200':
          description: A paginated list of transactions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /organizations/{id}/recurring-donation-plans:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listOrganizationRecurringDonationPlans
      tags:
        - Organizations
      summary: List an organization's recurring donation plans
      responses:
        '200':
          description: A paginated list of recurring donation plans.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecurringDonationPlanPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /organizations/{id}/source-tracking-codes:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: fundraisingTeams
        in: query
        schema:
          type: boolean
      - name: fundraisingPages
        in: query
        schema:
          type: boolean
      - name: transactions
        in: query
        schema:
          type: boolean
    get:
      operationId: listOrganizationSourceTrackingCodes
      tags:
        - Organizations
      summary: List an organization's source tracking codes
      description: >-
        Confirmed against the official classy-org/postman-collections
        "Fetch Source Codes" example. Optional flags control whether
        fundraising teams, fundraising pages, and transactions attributed
        to each code are included.
      responses:
        '200':
          description: A list of source tracking codes.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/SourceTrackingCode'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: getCampaign
      tags:
        - Campaigns
      summary: Retrieve a campaign
      responses:
        '200':
          description: The requested campaign.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateCampaign
      tags:
        - Campaigns
      summary: Update a campaign
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignInput'
      responses:
        '200':
          description: The updated campaign.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
  /campaigns/{id}/overview:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getCampaignOverview
      tags:
        - Campaigns
      summary: Retrieve a campaign's fundraising overview
      description: Progress totals - raised amount, goal, donor count - for a campaign.
      responses:
        '200':
          description: The campaign overview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Overview'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns/{id}/publish:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: publishCampaign
      tags:
        - Campaigns
      summary: Publish a campaign
      responses:
        '200':
          description: The published campaign.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns/{id}/unpublish:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: unpublishCampaign
      tags:
        - Campaigns
      summary: Unpublish a campaign
      responses:
        '200':
          description: The unpublished campaign.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns/{id}/deactivate:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: deactivateCampaign
      tags:
        - Campaigns
      summary: Deactivate a campaign
      responses:
        '200':
          description: The deactivated campaign.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns/{id}/fundraising-pages:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: listCampaignFundraisingPages
      tags:
        - Campaigns
      summary: List a campaign's fundraising pages
      responses:
        '200':
          description: A paginated list of fundraising pages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingPagePage'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCampaignFundraisingPage
      tags:
        - Campaigns
      summary: Create a fundraising page under a campaign
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FundraisingPageInput'
      responses:
        '200':
          description: The created fundraising page.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /campaigns/{id}/fundraising-teams:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listCampaignFundraisingTeams
      tags:
        - Campaigns
      summary: List a campaign's fundraising teams
      responses:
        '200':
          description: A paginated list of fundraising teams.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingTeamPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCampaignFundraisingTeam
      tags:
        - Campaigns
      summary: Create a fundraising team under a campaign
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FundraisingTeamInput'
      responses:
        '200':
          description: The created fundraising team.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingTeam'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /campaigns/{id}/designations:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listCampaignDesignations
      tags:
        - Campaigns
      summary: List a campaign's designations
      responses:
        '200':
          description: A paginated list of designations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DesignationPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns/{id}/unassigned-designations:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listCampaignUnassignedDesignations
      tags:
        - Campaigns
      summary: List a campaign's unassigned designations
      responses:
        '200':
          description: A paginated list of designations not assigned to a fundraising page.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DesignationPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /campaigns/{id}/transactions:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: listCampaignTransactions
      tags:
        - Campaigns
      summary: List a campaign's transactions
      responses:
        '200':
          description: A paginated list of transactions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCampaignTransaction
      tags:
        - Campaigns
      summary: Create a transaction on a campaign (offline / bulk donations)
      description: >-
        Posts an offline donation transaction against a campaign, as used by
        the official "Bulk Offline Donations" Postman collection for CSV/JSON
        batch imports.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OfflineTransactionInput'
      responses:
        '200':
          description: The created transaction.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /campaigns/{id}/source-tracking-codes:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: fundraisingTeams
        in: query
        schema:
          type: boolean
      - name: fundraisingPages
        in: query
        schema:
          type: boolean
      - name: transactions
        in: query
        schema:
          type: boolean
    get:
      operationId: listCampaignSourceTrackingCodes
      tags:
        - Campaigns
      summary: List a campaign's source tracking codes
      responses:
        '200':
          description: A list of source tracking codes.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/SourceTrackingCode'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /fundraising-pages/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: getFundraisingPage
      tags:
        - Fundraising Pages
      summary: Retrieve a fundraising page
      description: >-
        Supports ?with=source_tracking_codes, confirmed against the official
        "Fetch Source Codes" Postman collection.
      responses:
        '200':
          description: The requested fundraising page.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateFundraisingPage
      tags:
        - Fundraising Pages
      summary: Update a fundraising page
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FundraisingPageInput'
      responses:
        '200':
          description: The updated fundraising page.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      operationId: deleteFundraisingPage
      tags:
        - Fundraising Pages
      summary: Delete a fundraising page
      responses:
        '200':
          description: Deletion confirmation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /fundraising-pages/{id}/overview:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getFundraisingPageOverview
      tags:
        - Fundraising Pages
      summary: Retrieve a fundraising page's overview
      responses:
        '200':
          description: The fundraising page overview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Overview'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /fundraising-teams/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: getFundraisingTeam
      tags:
        - Fundraising Teams
      summary: Retrieve a fundraising team
      description: >-
        Supports ?with=source_tracking_codes, confirmed against the official
        "Fetch Source Codes" Postman collection.
      responses:
        '200':
          description: The requested fundraising team.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingTeam'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateFundraisingTeam
      tags:
        - Fundraising Teams
      summary: Update a fundraising team
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FundraisingTeamInput'
      responses:
        '200':
          description: The updated fundraising team.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingTeam'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      operationId: deleteFundraisingTeam
      tags:
        - Fundraising Teams
      summary: Delete a fundraising team
      responses:
        '200':
          description: Deletion confirmation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /fundraising-teams/{id}/overview:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getFundraisingTeamOverview
      tags:
        - Fundraising Teams
      summary: Retrieve a fundraising team's overview
      responses:
        '200':
          description: The fundraising team overview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Overview'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /fundraising-teams/{id}/fundraising-pages:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: createFundraisingTeamFundraisingPage
      tags:
        - Fundraising Teams
      summary: Create a member fundraising page under a team
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FundraisingPageInput'
      responses:
        '200':
          description: The created fundraising page.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundraisingPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /transactions/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: getTransaction
      tags:
        - Transactions
      summary: Retrieve a transaction
      description: >-
        Supports ?with=items and ?with=source_tracking_codes, confirmed
        against the official classy-org/postman-collections "Fetch
        Multi-Item Order" and "Fetch Source Codes" examples.
      responses:
        '200':
          description: The requested transaction.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateTransaction
      tags:
        - Transactions
      summary: Update a transaction
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        '200':
          description: The updated transaction.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
  /transactions/{id}/items:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listTransactionItems
      tags:
        - Transactions
      summary: List a transaction's line items
      responses:
        '200':
          description: A list of transaction items.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/TransactionItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /transactions/{id}/acknowledgements:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listTransactionAcknowledgements
      tags:
        - Transactions
      summary: List a transaction's acknowledgements
      responses:
        '200':
          description: A list of acknowledgements sent for the transaction.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createTransactionAcknowledgement
      tags:
        - Transactions
      summary: Send an acknowledgement for a transaction
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        '200':
          description: The created acknowledgement.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /recurring-donation-plans/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getRecurringDonationPlan
      tags:
        - Recurring Donation Plans
      summary: Retrieve a recurring donation plan
      responses:
        '200':
          description: The requested recurring donation plan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecurringDonationPlan'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateRecurringDonationPlan
      tags:
        - Recurring Donation Plans
      summary: Update a recurring donation plan
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        '200':
          description: The updated recurring donation plan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecurringDonationPlan'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
  /recurring-donation-plans/{id}/transactions:
    parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/With'
    get:
      operationId: listRecurringDonationPlanTransactions
      tags:
        - Recurring Donation Plans
      summary: List a recurring donation plan's transactions
      description: >-
        Supports ?with=items, confirmed against the official "Fetch
        Multi-Item Order" Postman collection.
      responses:
        '200':
          description: A paginated list of transactions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /members/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getMember
      tags:
        - Members
      summary: Retrieve a member
      responses:
        '200':
          description: The requested member.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /members/{id}/fundraising-pages:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listMemberFundraisingPages
      tags:
        - Members
      summary: List a member's fundraising pages
      responses:
        '200':
          description: A paginated list of fundraising pages.
          content:
            application/json:
        

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