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: schema: $ref: '#/components/schemas/FundraisingPagePage' '401': $ref: '#/components/responses/Unauthorized' /members/{id}/recurring-donation-plans: parameters: - $ref: '#/components/parameters/Id' get: operationId: listMemberRecurringDonationPlans tags: - Members summary: List a member'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' /supporters/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getSupporter tags: - Supporters summary: Retrieve a supporter responses: '200': description: The requested supporter. content: application/json: schema: $ref: '#/components/schemas/Supporter' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateSupporter tags: - Supporters summary: Update a supporter requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SupporterInput' responses: '200': description: The updated supporter. content: application/json: schema: $ref: '#/components/schemas/Supporter' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/ValidationError' /designations/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getDesignation tags: - Designations summary: Retrieve a designation responses: '200': description: The requested designation. content: application/json: schema: $ref: '#/components/schemas/Designation' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateDesignation tags: - Designations summary: Update a designation requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DesignationInput' responses: '200': description: The updated designation. content: application/json: schema: $ref: '#/components/schemas/Designation' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/ValidationError' components: securitySchemes: bearerAuth: type: http scheme: bearer description: >- OAuth2 client_credentials access token obtained from POST /oauth2/auth. Passed as `Authorization: Bearer {access_token}`. parameters: Id: name: id in: path required: true description: The numeric ID of the resource. schema: type: integer 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 responses: Unauthorized: description: Missing, invalid, or expired Bearer token. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' ValidationError: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: AuthRequest: type: object required: - client_id - client_secret - grant_type properties: client_id: type: string client_secret: type: string grant_type: type: string enum: - client_credentials - password - refresh_token AuthResponse: type: object properties: access_token: type: string expires_in: type: integer description: Token lifetime in seconds (observed value 7200 in Classy's own examples). queries_log: type: array items: type: object additionalProperties: true token_type: type: string example: bearer Error: type: object properties: error: type: string error_description: type: string permissions: type: array items: type: object properties: action: type: string entity: type: string DeleteResponse: type: object properties: id: type: integer deleted: type: boolean 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 nullable: true path: type: string per_page: type: integer prev_page_url: type: string nullable: true to: type: integer total: type: integer 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 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 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 CampaignPage: allOf: - $ref: '#/components/schemas/PaginationEnvelope' - type: object properties: data: type: array items: $ref: '#/components/schemas/Campaign' Overview: type: object properties: raw_goal: type: number raw_total_raised: type: number donor_count: type: integer currency_code: type: string additionalProperties: true FundraisingPageInput: type: object required: - title properties: title: type: string goal: type: number story: type: string member_id: type: integer additionalProperties: true FundraisingPage: allOf: - $ref: '#/components/schemas/FundraisingPageInput' - type: object properties: id: type: integer campaign_id: type: integer fundraising_team_id: type: integer nullable: true 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 FundraisingPagePage: allOf: - $ref: '#/components/schemas/PaginationEnvelope' - type: object properties: data: type: array items: $ref: '#/components/schemas/FundraisingPage' FundraisingTeamInput: type: object required: - name properties: name: type: string goal: type: number parent_team_id: type: integer nullable: true additionalProperties: true FundraisingTeam: allOf: - $ref: '#/components/schemas/FundraisingTeamInput' - type: object properties: id: type: integer campaign_id: type: integer 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 FundraisingTeamPage: allOf: - $ref: '#/components/schemas/PaginationEnvelope' - type: object properties: data: type: array items: $ref: '#/components/schemas/FundraisingTeam' OfflineTransactionInput: type: object description: >- Modeled on the official classy-org/postman-collections "Bulk Offline Donations" example bodies (Offline Transaction CSV / JSON). required: - billing_first_name - billing_last_name - items - offline_payment_info properties: billing_address1: type: string billing_address2: type: string billing_city: type: string billing_country: type: string billing_first_name: type: string billing_last_name: type: string billing_postal_code: type: string billing_state: type: string member_email_address: type: string format: email member_name: type: string member_phone: type: string status: type: string enum: - success - pending - failed offline_payment_info: type: object properties: payment_type: type: string description: e.g. cash, check, in_kind. items: type: array items: type: object properties: product_name: type: string quantity: type: integer raw_final_price: type: number type: type: string description: e.g. donation, ticket, merchandise. 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 nullable: true fundraising_team_id: type: integer nullable: true 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 TransactionPage: allOf: - $ref: '#/components/schemas/PaginationEnvelope' - type: object properties: data: type: array items: $ref: '#/components/schemas/Transaction' 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 nullable: true organization_id: type: integer raw_final_price: type: number currency_code: type: string promo_code_id: type: integer nullable: true 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 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 RecurringDonationPlanPage: allOf: - $ref: '#/components/schemas/PaginationEnvelope' - type: object properties: data: type: array items: $ref: '#/components/schemas/RecurringDonationPlan' Member: type: object properties: id: type: integer first_name: type: string last_name: type: string email_address: type: string format: email created_at: type: string format: date-time updated_at: type: string format: date-time 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 Supporter: allOf: - $ref: '#/components/schemas/SupporterInput' - type: object properties: id: type: integer organization_id: type: integer member_id: type: integer nullable: true created_at: type: string format: date-time updated_at: type: string format: date-time SupporterPage: allOf: - $ref: '#/components/schemas/PaginationEnvelope' - type: object properties: data: type: array items: $ref: '#/components/schemas/Supporter' DesignationInput: type: object required: - name properties: name: type: string description: type: string active: type: boolean additionalProperties: true Designation: allOf: - $ref: '#/components/schemas/DesignationInput' - type: object properties: id: type: integer organization_id: type: integer campaign_id: type: integer nullable: true raw_current_amount: type: number created_at: type: string format: date-time updated_at: type: string format: date-time DesignationPage: allOf: - $ref: '#/components/schemas/PaginationEnvelope' - type: object properties: data: type: array items: $ref: '#/components/schemas/Designation'