Classy Supporters API
Retrieve and update supporter records - the donor/CRM profile Classy maintains per organization - and trigger Mailchimp subscribe actions for a supporter.
Retrieve and update supporter records - the donor/CRM profile Classy maintains per organization - and trigger Mailchimp subscribe actions for a supporter.
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