Classy Organizations API
Nonprofit organization records and their nested collections.
Nonprofit organization records and their nested collections.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/classy-org-organizations-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Classy API (GoFundMe Pro) Authentication Organizations API
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: Organizations
description: Nonprofit organization records and their nested collections.
paths:
/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'
components:
schemas:
TransactionItem:
type: object
properties:
id:
type: integer
transaction_id:
type: integer
type:
type: string
description: e.g. donation, ticket, merchandise, fee.
donation_gross_amount:
type: number
donation_net_amount:
type: number
campaign_id:
type: integer
fundraising_page_id:
type:
- integer
- 'null'
organization_id:
type: integer
raw_final_price:
type: number
currency_code:
type: string
promo_code_id:
type:
- integer
- 'null'
additionalProperties: true
SourceTrackingCode:
type: object
description: Confirmed against the official "Fetch Source Codes" Postman collection example.
properties:
id:
type: integer
campaign_id:
type: integer
code:
type: string
source:
type: string
medium:
type: string
fundraising_teams:
type: array
items:
type: object
additionalProperties: true
fundraising_pages:
type: array
items:
type: object
additionalProperties: true
transactions:
type: array
items:
type: object
additionalProperties: true
additionalProperties: true
SupporterInput:
type: object
properties:
first_name:
type: string
last_name:
type: string
email_address:
type: string
format: email
phone:
type: string
additionalProperties: true
CampaignInput:
type: object
required:
- name
- type
properties:
name:
type: string
type:
type: string
description: Campaign type, e.g. donation, peer_to_peer, crowdfunding, event, ticketed_event.
goal:
type: number
currency_code:
type: string
started_at:
type: string
format: date-time
ended_at:
type: string
format: date-time
additionalProperties: true
Supporter:
allOf:
- $ref: '#/components/schemas/SupporterInput'
- type: object
properties:
id:
type: integer
organization_id:
type: integer
member_id:
type:
- integer
- 'null'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
FundraisingPageInput:
type: object
required:
- title
properties:
title:
type: string
goal:
type: number
story:
type: string
member_id:
type: integer
additionalProperties: true
RecurringDonationPlanPage:
allOf:
- $ref: '#/components/schemas/PaginationEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/RecurringDonationPlan'
Campaign:
allOf:
- $ref: '#/components/schemas/CampaignInput'
- type: object
properties:
id:
type: integer
organization_id:
type: integer
status:
type: string
raw_current_raised_amount:
type: number
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
PaginationEnvelope:
type: object
properties:
current_page:
type: integer
first_page_url:
type: string
from:
type: integer
last_page:
type: integer
last_page_url:
type: string
next_page_url:
type:
- string
- 'null'
path:
type: string
per_page:
type: integer
prev_page_url:
type:
- string
- 'null'
to:
type: integer
total:
type: integer
SupporterPage:
allOf:
- $ref: '#/components/schemas/PaginationEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Supporter'
RecurringDonationPlan:
type: object
properties:
id:
type: integer
campaign_id:
type: integer
member_id:
type: integer
status:
type: string
enum:
- active
- paused
- cancelled
frequency:
type: string
description: e.g. monthly, weekly, annually.
raw_amount:
type: number
currency_code:
type: string
next_charge_date:
type: string
format: date
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
additionalProperties: true
DesignationInput:
type: object
required:
- name
properties:
name:
type: string
description:
type: string
active:
type: boolean
additionalProperties: true
TransactionPage:
allOf:
- $ref: '#/components/schemas/PaginationEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Transaction'
Transaction:
type: object
description: Field names confirmed against the official "Fetch Multi-Item Order" Postman collection example response.
properties:
id:
type: integer
campaign_id:
type: integer
organization_id:
type: integer
fundraising_page_id:
type:
- integer
- 'null'
fundraising_team_id:
type:
- integer
- 'null'
supporter_id:
type: integer
status:
type: string
enum:
- success
- pending
- failed
- refunded
billing_first_name:
type: string
billing_last_name:
type: string
billing_address1:
type: string
billing_city:
type: string
billing_state:
type: string
billing_postal_code:
type: string
billing_country:
type: string
card_type:
type: string
card_last_four:
type: integer
charged_at:
type: string
format: date-time
charged_currency_code:
type: string
charged_total_gross_amount:
type: number
classy_fees_amount:
type: number
total_gross_amount:
type: number
comment:
type: string
acknowledgements_count:
type: integer
items:
type: array
items:
$ref: '#/components/schemas/TransactionItem'
updated_at:
type: string
format: date-time
additionalProperties: true
CampaignPage:
allOf:
- $ref: '#/components/schemas/PaginationEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Campaign'
Error:
type: object
properties:
error:
type: string
error_description:
type: string
permissions:
type: array
items:
type: object
properties:
action:
type: string
entity:
type: string
DesignationPage:
allOf:
- $ref: '#/components/schemas/PaginationEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Designation'
Organization:
type: object
properties:
id:
type: integer
name:
type: string
currency_code:
type: string
status:
type: string
website_url:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
additionalProperties: true
FundraisingPagePage:
allOf:
- $ref: '#/components/schemas/PaginationEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/FundraisingPage'
FundraisingPage:
allOf:
- $ref: '#/components/schemas/FundraisingPageInput'
- type: object
properties:
id:
type: integer
campaign_id:
type: integer
fundraising_team_id:
type:
- integer
- 'null'
status:
type: string
url:
type: string
raw_current_amount:
type: number
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Designation:
allOf:
- $ref: '#/components/schemas/DesignationInput'
- type: object
properties:
id:
type: integer
organization_id:
type: integer
campaign_id:
type:
- integer
- 'null'
raw_current_amount:
type: number
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
parameters:
With:
name: with
in: query
required: false
description: Comma-separated list of related sub-resources to eager-load, e.g. items, source_tracking_codes, organization, member.
schema:
type: string
Id:
name: id
in: path
required: true
description: The numeric ID of the resource.
schema:
type: integer
responses:
Unauthorized:
description: Missing, invalid, or expired Bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ValidationError:
description: The request payload failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'OAuth2 client_credentials access token obtained from POST /oauth2/auth. Passed as `Authorization: Bearer {access_token}`.'