GoFundMe Supporters API

Supporters

Documentation

Specifications

Other Resources

OpenAPI Specification

gofundme-supporters-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GoFundMe Pro Supporters API
  description: "<h1>GoFundMe Pro API</h1>\n<p>Welcome to the GoFundMe Pro API (2.0.0), a powerful toolset that empowers innovative and creative minds to engineer the world for good. This documentation walks through the API’s latest endpoints.</p>\n<p>GoFundMe Pro APIs are crafted around REST and the REST architectural style to provide developers with a stateless and language-­agnostic interface. The GoFundMe Pro API leverages HTTP verbs and response codes, OAuth2 authentication, and resource-­oriented URLs.</p>\n<p>Currently, the GoFundMe Pro API only supports JSON. All POST/PUT requests required a valid JSON object for the request body.</p>\n<h2>Errors</h2>\n<p>The GoFundMe Pro API leverages standard HTTP response status codes for it’s error responses. Error codes are:</p>\n<p><br /></p>\n<table border='1'>\n<tr>\n<th width='100px'>Error Code</th>\n<th>Meaning</th>\n</tr>\n<tr>\n<td>400</td>\n<td>Bad Request: The request was malformed or provided incorrect/incomplete/conflicting parameters. Check the response for more detailed messaging about why the request was incorrect. Do not repeat request.</td>\n</tr>\n<tr>\n<td>401</td>\n<td>Unauthorized: The API does not recognize the request as authorized. API access token may be missing or invalid.</td>\n</tr>\n<tr>\n<td>403</td>\n<td>Forbidden: The API recognizes the authorized API user, but the API user does not have correct permissions to satisfy the request.</td>\n</tr>\n<tr>\n<td>404</td>\n<td>Not Found: The resource requested does not exist or was not found.</td>\n</tr>\n<tr>\n<td>405</td>\n<td>Method Not Allowed: Some REST endpoints only accept a subset of valid REST HTTP verbs. This error is sent when an unsupported verb is requested.</td>\n</tr>\n<tr>\n<td>429</td>\n<td>Too Many Requests: The rate limit has been exceeded. See the <a href=\"#rate-limiting\">Rate Limiting</a> section for details on rate limits and response headers.</td>\n</tr>\n<tr>\n<td>500</td>\n<td>Error: The request was valid, but something failed on the server. Additional messages may be available.</td>\n</tr>\n<tr>\n<td>503</td>\n<td>Service Unavailable: The service is temporarily unavailable.</td>\n</tr>\n</table>\n<h2>Requests</h2>\n<h3>Authenticating Requests</h3>\n<p>Most API requests will need to be signed with an Access Token.</p>\n<p>Refer to the <a href=\"https://developers.gofundme.com/pro/overview/authentication\" target=\"_blank\" rel=\"noopener noreferrer\">Resource Documentation</a> for the specific call you are making to see if an access token is required for your request. See <a href=\"https://developers.gofundme.com/pro/tutorials/samples\" target=\"_blank\" rel=\"noopener noreferrer\">this page</a> for a demonstration of usage through a sample app. \n<h3>Filters</h3>\n<p>We can filter a collection based on a set of input parameters. To do so, we can modify the query string using the parameters listed below.</p>\n\n<table border='1'>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Default</th>\n<th>Description</th>\n</tr>\n\n<tr>\n<td>with</td>\n<td>string</td>\n<td>N/A</td>\n<td>This allows you to include nested related resource. For example, you could request a campaign along with the organization it belongs to and the designation it was allocated to. In this case, <code>with=organization,designation.</code></td>\n</tr>\n\n<tr>\n<td>per_page</td>\n<td>integer</td>\n<td>20</td>\n<td>Set the total number of resources returned per page (Maximum: 100).</td>\n</tr>\n\n<tr>\n<td>page</td>\n<td>integer</td>\n<td>1</td>\n<td>Page to return.</td>\n</tr>\n\n<tr>\n<td>sort</td>\n<td>string</td>\n<td>Depends on endpoint</td>\n<td>\nOrder the resources depending upon their attributes. Examples:\n<ul>\n<li><strong>created_at</strong>: oldest resource will come first</li>\n<li><strong>created_at:desc</strong>: newest resource will come first</li>\n<li><strong>last_name:asc,first_name:asc</strong>: order resources by last_name in alphabetical order. If same last_name, order by first_name in alphabetical order.</li>\n</ul>\n</td>\n</tr>\n\n<tr>\n<td>fields</td>\n<td>string</td>\n<td>Depends on endpoint</td>\n<td>List of resources attributes separated with comma. Narrow the list of attributes returned for each resource.</td>\n</tr>\n\n<tr>\n<td>filter</td>\n<td>string</td>\n<td>NULL</td>\n<td>\nAllow to filter the list of resources returned. Format is: <code>{association}.{attribute1}{operand}{value}</code> where: <ul>\n<li>association is the association if this is a nested filter (optional)</li>\n<li>operand is one of the following: <code><=, >=, <>, !=, =, <, or ></code>. Operand must be url encoded. (Note: if you are filtering on a boolean value, <code>true</code> can be expressed with <code>true</code> or <code>1</code>. Additionally, false can be expressed with <code>false</code> or <code>0</code>).</li>\n<li>If filtering on an association, ensure you include the nested resource using the ‘with’ parameter. with | string | NULL | This allows you to include a nested related resource. For example, you could request a collection of campaigns along with the organization they belong to and the designation they were allocated to. In this case, <code>with=organization,designation</code>.</li>\n</ul>\n</td>\n</tr>\n</table>\n\n<p>When filtering, the operand should be one of the following:</p>\n<p><code><=, >=, <>, !=, =, <, or ></code>. Operand must be url encoded. (Note: if you are filtering on a boolean value, <code>true</code> can be expressed with <code>true</code> or <code>1</code>. Additionally, <code>false</code> can be expressed with <code>false</code> or <code>0</code>).</p>\n<p>If filtering on an association, ensure you include the nested resource using the ‘with’ parameter. This allows you to include a nested related resource. For example, you could request a collection of campaigns along with the organization they belong to and the designation they were allocated to. In this case, <code>with=organization,designation</code>.</p>\n<p>Refer to the sample documentation for the specific call you are making to see which related resource can be fetched.</p>\n\n<h3>Date and Time Filtering</h3>\n<p>Unless otherwise noted, all Datetime attributes in API responses will be returned in an ISO8601 compliant format:</p>\n<><code>YYYY-MM-DDTHH:mm:ss.sssZ</code> (e.g. <code>2024-10-05T14:48:00.000Z</code>).</p>\n<h2 id=\"rate-limiting\">Rate Limiting</h2>\n<p>The GoFundMe Pro API implements rate limiting to ensure fair usage and maintain service quality for all users. Rate limits are applied on a per-application and per-user basis.</p>\n<h3>When Rate Limiting Applies</h3>\n<p>Rate limiting is applied to requests that meet the following conditions:</p>\n<ul>\n<li>The API application is <strong>not internal</strong> (external/third-party applications)</li>\n<li>The API application is associated to an Organization</li>\n</ul>\n<p>Internal applications are not subject to rate limiting.</p>\n<h3>Rate Limit Details</h3>\n<p>By default, the rate limit is:</p>\n<ul>\n<li><strong>1800 requests per minute</strong> per application</li>\n</ul>\n<p>Rate limits may be adjusted dynamically via flags for specific applications or users.</p>\n<h3>Rate Limit Headers</h3>\n<p>All API responses include the following headers to help you track your rate limit status:</p>\n<table border='1'>\n<tr>\n<th width='200px'>Header</th>\n<th>Description</th>\n</tr>\n<tr>\n<td><code>X-RateLimit-Limit</code></td>\n<td>The maximum number of requests allowed in the current time window</td>\n</tr>\n<tr>\n<td><code>X-RateLimit-Remaining</code></td>\n<td>The number of requests remaining in the current time window</td>\n</tr>\n<tr>\n<td><code>X-RateLimit-Reset</code></td>\n<td>Unix timestamp indicating when the rate limit window resets (only included when limit is exceeded)</td>\n</tr>\n<tr>\n<td><code>Retry-After</code></td>\n<td>Number of seconds to wait before retrying (only included in 429 responses)</td>\n</tr>\n</table>\n<h3>Handling Rate Limit Errors</h3>\n<p>When you exceed the rate limit, the API will return a <code>429 Too Many Requests</code> response with the following structure:</p>\n<pre><code>{\n  \"message\": \"Too Many Attempts.\",\n  \"retry_after\": 42\n}</code></pre>\n<p>The response will include the <code>Retry-After</code> header indicating how many seconds you should wait before making another request.</p>\n<h3>Best Practices</h3>\n<ul>\n<li>Monitor the <code>X-RateLimit-Remaining</code> header to track your usage</li>\n<li>Implement exponential backoff when you receive a 429 response</li>\n<li>Respect the <code>Retry-After</code> header value before retrying</li>\n<li>Cache responses when possible to reduce API calls</li>\n<li>Batch operations when the API supports it</li>\n</ul>"
  version: 2.0.0
servers:
- url: https://pro.gofundme.com/api/2.0
security:
- OAuth2Application: []
- OAuth2Member: []
tags:
- name: Supporters
  description: Supporters
paths:
  /fundraising-pages/{id}/donors:
    get:
      tags:
      - Supporters
      summary: List fundraising page donations
      description: Returns all successful donations to the fundraising page. Each donation/order is a separate entry, so supporters who made multiple donations appear multiple times. Includes anonymous donations and offline donations without email addresses. Only accessible to admins.
      operationId: listFundraisingPageDonors
      parameters:
      - name: id
        in: path
        description: ID of Fundraising Page
        required: true
        schema:
          type: integer
          example: 2173528
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginatedResponse'
                - properties:
                    data:
                      description: List of successful donations. Each donation is a separate entry and may have a null email_address (for example, offline donations without email).
                      type: array
                      items:
                        type: object
                        allOf:
                        - $ref: '#/components/schemas/Transaction'
                        - required:
                          - donation_id
                          - amount
                          - purchased_at
                          properties:
                            first_name:
                              description: Donor first name from billing information when available; otherwise supporter/contact first name
                              type:
                              - string
                              - 'null'
                              example: John
                            last_name:
                              description: Donor last name from billing information when available; otherwise supporter/contact last name
                              type:
                              - string
                              - 'null'
                              example: Doe
                            email_address:
                              description: Donor email address when known; can be null for offline donations
                              type:
                              - string
                              - 'null'
                              format: email
                              example: donor@example.com
                            feed_item_id:
                              description: Related feed item ID for this donation when available. Use this ID for feed-item comment APIs.
                              type:
                              - integer
                              - 'null'
                              example: 160736679
                            amount:
                              description: Total donation amount for this order
                              type: number
                              format: float
                              example: 100
                            donation_id:
                              description: ID of the donation/order
                              type: integer
                              example: 42486777
                            purchased_at:
                              description: Date and time when the donation was made
                              type: string
                              format: date-time
                              example: '2024-06-01T10:00:00Z'
                          type: object
                  type: object
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
  /fundraising-pages/{id}/donor-emails:
    get:
      tags:
      - Supporters
      summary: List unique donor email addresses
      description: Returns unique non-empty email addresses from donations to this fundraising page. Each email appears only once, even if the donor made multiple donations. Donations without email are intentionally excluded. Pagination counts reflect unique emails, not total donations. Optimized for bulk operations like 'copy all emails'.
      operationId: listFundraisingPageDonorEmails
      parameters:
      - name: id
        in: path
        description: ID of Fundraising Page
        required: true
        schema:
          type: integer
          example: 2173528
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginatedResponse'
                - properties:
                    data:
                      description: List of unique email addresses. Each email appears once regardless of donation count.
                      type: array
                      items:
                        required:
                        - email_address
                        properties:
                          email_address:
                            description: Unique donor email address
                            type: string
                            format: email
                            example: donor@example.com
                        type: object
                  type: object
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
  /fundraising-pages/{id}/past-donors:
    get:
      tags:
      - Supporters
      summary: List fundraiser past donors
      description: Returns one row per supporter (deduplicated by customers_id + charity_id) who made at least one successful donation to another page owned by the current fundraiser in this organization. Offline donations and donations with no email address are included. For each supporter the response exposes billing name/email (with fallback to contact record), the fundraising page ID and title of their most recent qualifying order, the timestamp of that latest order, the aggregate SUM of every qualifying donation amount, and a flag indicating whether they have also donated to the current page. Default order is alphabetical by donor name ascending; pass sortReverse=true to invert.
      operationId: listFundraisingPagePastDonors
      parameters:
      - name: id
        in: path
        description: ID of Fundraising Page
        required: true
        schema:
          type: integer
          example: 2173528
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      - name: sortReverse
        in: query
        description: Reverse the default alphabetical sort (Z→A when true).
        schema:
          type: boolean
          default: false
      - name: hideAlreadyDonated
        in: query
        description: When true, supporters who have already donated to the current page are omitted.
        schema:
          type: boolean
          default: false
      - name: search
        in: query
        description: Case-insensitive substring match applied to donor first name, last name, full name, and email address.
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginatedResponse'
                - properties:
                    data:
                      description: List of past donors, one row per unique supporter.
                      type: array
                      items:
                        required:
                        - id
                        - fundraising_page_id
                        - title
                        - purchased_at
                        - amount
                        - donated_to_current
                        properties:
                          id:
                            description: Orders ID of the supporter's latest qualifying donation, unique per row.
                            type: integer
                            example: 42486777
                          member_id:
                            description: Customer/supporter identifier that ties this donor's records together across orders.
                            type:
                            - integer
                            - 'null'
                            example: 918273
                          first_name:
                            description: Donor first name. Uses the order's billing first name when available; otherwise falls back to the contact record.
                            type:
                            - string
                            - 'null'
                            example: Jane
                          last_name:
                            description: Donor last name. Uses the order's billing last name when available; otherwise falls back to the contact record.
                            type:
                            - string
                            - 'null'
                            example: Doe
                          email_address:
                            description: Donor email. Uses the order's billing email when available; otherwise falls back to the contact email. May be null for offline donations with no email on record.
                            type:
                            - string
                            - 'null'
                            format: email
                            example: jane.doe@example.org
                          fundraising_page_id:
                            description: Fundraising page ID the supporter donated to in their most recent qualifying order.
                            type: integer
                            example: 2173528
                          title:
                            description: page_title of the fundraising page referenced by the most recent qualifying order.
                            type: string
                            example: Help Build a School
                          purchased_at:
                            description: Timestamp of the supporter's most recent qualifying order.
                            type: string
                            format: date-time
                            example: '2024-01-15T10:45:00Z'
                          amount:
                            description: Aggregate SUM of order_total across every qualifying donation made by this supporter, not just the latest order.
                            type: number
                            format: float
                            example: 150
                          donated_to_current:
                            description: Whether the supporter has also made a successful donation to the current fundraising page.
                            type: boolean
                            example: true
                        type: object
                  type: object
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
  /fundraising-teams/{id}/donors:
    get:
      tags:
      - Supporters
      summary: List fundraising team donations
      description: Returns all successful donations to the fundraising team. Each donation/order is a separate entry, so supporters who made multiple donations appear multiple times. Includes anonymous donations and offline donations without email addresses. Only accessible to admins.
      operationId: listFundraisingTeamDonors
      parameters:
      - name: id
        in: path
        description: ID of Fundraising Team
        required: true
        schema:
          type: integer
          example: 2173528
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginatedResponse'
                - properties:
                    data:
                      description: List of successful donations. Each donation is a separate entry and may have a null email_address (for example, offline donations without email).
                      type: array
                      items:
                        type: object
                        allOf:
                        - $ref: '#/components/schemas/Transaction'
                        - required:
                          - donation_id
                          - amount
                          - purchased_at
                          properties:
                            first_name:
                              description: Donor first name from billing information when available; otherwise supporter/contact first name
                              type:
                              - string
                              - 'null'
                              example: John
                            last_name:
                              description: Donor last name from billing information when available; otherwise supporter/contact last name
                              type:
                              - string
                              - 'null'
                              example: Doe
                            email_address:
                              description: Donor email address when known; can be null for offline donations
                              type:
                              - string
                              - 'null'
                              format: email
                              example: donor@example.com
                            feed_item_id:
                              description: Related feed item ID for this donation when available. Use this ID for feed-item comment APIs.
                              type:
                              - integer
                              - 'null'
                              example: 160736679
                            amount:
                              description: Total donation amount for this order
                              type: number
                              format: float
                              example: 100
                            donation_id:
                              description: ID of the donation/order
                              type: integer
                              example: 42486777
                            purchased_at:
                              description: Date and time when the donation was made
                              type: string
                              format: date-time
                              example: '2024-06-01T10:00:00Z'
                          type: object
                  type: object
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
  /fundraising-teams/{id}/past-donors:
    get:
      tags:
      - Supporters
      summary: List fundraising team past donors
      description: Returns one row per supporter (deduplicated by customers_id + charity_id) who made at least one successful donation to another team owned by the current team lead in this organization (the current team is excluded). Offline donations and donations with no email address are included. For each supporter the response exposes billing name/email (with fallback to contact record), the fundraising page ID the latest qualifying donation was made to, the team name (title) of the team that owns that page, the timestamp of the latest order, the aggregate SUM of every qualifying donation amount, and a flag indicating whether they have also donated to the current team. Default order is alphabetical by donor name ascending; pass sortReverse=true to invert.
      operationId: listFundraisingTeamPastDonors
      parameters:
      - name: id
        in: path
        description: ID of Fundraising Team
        required: true
        schema:
          type: integer
          example: 2173528
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      - name: sortReverse
        in: query
        description: Reverse the default alphabetical sort (Z→A when true).
        schema:
          type: boolean
          default: false
      - name: hideAlreadyDonated
        in: query
        description: When true, supporters who have already donated to the current team are omitted.
        schema:
          type: boolean
          default: false
      - name: search
        in: query
        description: Case-insensitive substring match applied to donor first name, last name, full name, and email address.
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginatedResponse'
                - properties:
                    data:
                      description: List of past donors, one row per unique supporter.
                      type: array
                      items:
                        required:
                        - id
                        - fundraising_page_id
                        - title
                        - purchased_at
                        - amount
                        - donated_to_current
                        properties:
                          id:
                            description: Orders ID of the supporter's latest qualifying donation, unique per row.
                            type: integer
                            example: 42486777
                          member_id:
                            description: Customer/supporter identifier that ties this donor's records together across orders.
                            type:
                            - integer
                            - 'null'
                            example: 918273
                          first_name:
                            description: Donor first name. Uses the order's billing first name when available; otherwise falls back to the contact record.
                            type:
                            - string
                            - 'null'
                            example: Jane
                          last_name:
                            description: Donor last name. Uses the order's billing last name when available; otherwise falls back to the contact record.
                            type:
                            - string
                            - 'null'
                            example: Doe
                          email_address:
                            description: Donor email. Uses the order's billing email when available; otherwise falls back to the contact email. May be null for offline donations with no email on record.
                            type:
                            - string
                            - 'null'
                            format: email
                            example: jane.doe@example.org
                          fundraising_page_id:
                            description: Fundraising page ID the supporter donated to in their most recent qualifying order.
                            type: integer
                            example: 2173528
                          title:
                            description: team_name of the fundraising team that owns the page referenced by the most recent qualifying order.
                            type: string
                            example: Team Alpha
                          purchased_at:
                            description: Timestamp of the supporter's most recent qualifying order.
                            type: string
                            format: date-time
                            example: '2024-01-15T10:00:00Z'
                          amount:
                            description: Aggregate SUM of order_total across every qualifying donation made by this supporter, not just the latest order.
                            type: number
                            format: float
                            example: 150
                          donated_to_current:
                            description: Whether the supporter has also made a successful donation to the current fundraising team.
                            type: boolean
                            example: true
                        type: object
                  type: object
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
components:
  schemas:
    TransactionContext:
      title: Transaction Context
      properties:
        application_fee_campaign_category:
          description: Campaign Category the Transaction belongs to
          type:
          - string
          - 'null'
          enum:
          - main_donate_button
          - recurring_migration
          - high_value
          - virtual
          example: main_donate_button
        application_fee_platform_fee_type:
          description: type of VRP Platform Fee the Transaction has, if applicable
          type:
          - string
          - 'null'
          enum:
          - non_migrated_recurring
          - migrated_recurring
          - major_gift
          example: non_migrated_recurring
        commerce_order_id:
          description: Commerce Order ID
          type:
          - string
          - 'null'
          example: or_01HFSN0GJZ6656RM8602Z37DY1
        customizations_metadata:
          description: Arbitrary JSON metadata set by a custom embedded Studio block
          type:
          - object
          - 'null'
          example:
            theme: dark
            custom_fields:
              field1: value1
        created_by:
          description: Name of associated App
          type:
          - string
          - 'null'
          example: My App
        commerce_confirmation_id:
          description: Commerce Confirmation ID
          t

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