openapi: 3.0.3 info: title: Classy API (GoFundMe Pro) Authentication Transactions 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: Transactions description: Donations, ticket, and merchandise order transactions. paths: /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' components: 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 schemas: 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 Error: type: object properties: error: type: string error_description: type: string permissions: type: array items: type: object properties: action: type: string entity: type: string 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 responses: ValidationError: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' 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' securitySchemes: bearerAuth: type: http scheme: bearer description: 'OAuth2 client_credentials access token obtained from POST /oauth2/auth. Passed as `Authorization: Bearer {access_token}`.'