GoFundMe Designation API

A Designation refers to a specific cause the organization campaigns under. Multiple campaigns can benefit the designated project. Designations allow me to assign Campaigns that champion the same cause to one Designation. GoFundMe Pro can also retrieve donation metrics for Designations as an aggregation of all Campaigns within a Designation.

Documentation

Specifications

Other Resources

OpenAPI Specification

gofundme-designation-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GoFundMe Pro Designation 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: Designation
  description: 'A Designation refers to a specific cause the organization campaigns under. Multiple campaigns can

    benefit the designated project. Designations allow me to assign Campaigns that champion the same cause to one Designation. GoFundMe Pro can also retrieve donation metrics for

    Designations as an aggregation of all Campaigns within a Designation.'
paths:
  /designations/{designation}:
    get:
      tags:
      - Designation
      summary: fetchDesignation
      description: Fetch specified Designation
      operationId: fetchDesignation
      parameters:
      - name: designation
        in: path
        description: Primary identifier of Designation
        required: true
        schema:
          type: integer
          example: 34672
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Designation'
        '403':
          description: Requester is not authorized to perform action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Designation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
    put:
      tags:
      - Designation
      summary: updateDesignation
      description: Update specified Designation
      operationId: updateDesignation
      parameters:
      - name: designation
        in: path
        description: Primary identifier of Designation
        required: true
        schema:
          type: integer
          example: 34672
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DesignationFillable'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Designation'
        '403':
          description: Requester is not authorized to perform action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Designation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
      security:
      - OAuth2Member: []
    delete:
      tags:
      - Designation
      summary: deleteDesignation
      description: Delete a specified Designation
      operationId: deleteDesignation
      parameters:
      - name: designation
        in: path
        description: Primary identifier of Designation
        required: true
        schema:
          type: integer
          example: 34672
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmptyResponse'
        '403':
          description: Requester is not authorized to perform action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Designation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
      security:
      - OAuth2Member: []
  /organizations/{organization}/designations:
    get:
      tags:
      - Designation
      summary: listOrganizationDesignations
      description: Retrieves a list of all Designations related to the specified Organization
      operationId: listOrganizationDesignations
      parameters:
      - name: organization
        in: path
        description: The specified Organization ID
        required: true
        schema:
          type: integer
          example: 82364
      - name: fields
        in: query
        description: Comma-separated list of fields to be returned
        required: false
        schema:
          type: string
          enum:
          - city
          - created_at
          - description
          - end_time
          - external_reference_id
          - goal
          - id
          - is_active
          - is_complete
          - is_default
          - name
          - organization_id
          - postal_code
          - start_time
          - state
          - updated_at
          example: id
      - $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: Collection of Designations
                      type: array
                      items:
                        $ref: '#/components/schemas/Designation'
                    first_page_url:
                      example: '{host}/organizations/82364/designations?page=1'
                    last_page_url:
                      example: '{host}/organizations/82364/designations?page=1'
                    path:
                      example: '{host}/organizations/82364/designations'
                  type: object
        '403':
          description: Requester is not authorized to perform action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Organization not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
    post:
      tags:
      - Designation
      summary: createOrganizationDesignation
      description: Create Designation for specified Organization
      operationId: createOrganizationDesignation
      parameters:
      - name: organization
        in: path
        description: Primary identifier of Organization
        required: true
        schema:
          type: integer
          example: 82364
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DesignationFillable'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Designation'
        '403':
          description: Requester is not authorized to perform action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Organization not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
      security:
      - OAuth2Member: []
components:
  schemas:
    PaginatedResponse:
      title: Paginated Response
      properties:
        current_page:
          description: Index of current page
          type: integer
          example: 1
        data:
          description: Collection of results
          type: array
          items:
            type: object
        first_page_url:
          description: URL of first page of results
          type:
          - string
          - 'null'
          example: https://pro.gofundme.com/api/2.0/resource?page=1
        from:
          description: Index of first displayed result within total result set
          type:
          - integer
          - 'null'
          example: 1
        last_page:
          description: Index of last page in result set
          type: integer
          example: 1
        last_page_url:
          description: URL of last page of results
          type:
          - string
          - 'null'
          example: https://pro.gofundme.com/api/2.0/resource?page=1
        next_page_url:
          description: URL of next page of results
          type:
          - string
          - 'null'
          example: https://pro.gofundme.com/api/2.0/resource?page=2
        path:
          description: URL of current page of results
          type:
          - string
          - 'null'
          example: https://pro.gofundme.com/api/2.0/resource
        per_page:
          description: Maximum number of records returned per page of results
          type: integer
          example: 20
        prev_page_url:
          description: URL of previous page of results
          type:
          - string
          - 'null'
          example: https://pro.gofundme.com/api/2.0/resource?page=1
        links:
          description: Collection of objects representing pages {label, URL, active} that can be used to request the associated page of records.
          type: array
          items:
            $ref: '#/components/schemas/PaginationLink'
        to:
          description: Index of last displayed result within total result set
          type:
          - integer
          - 'null'
          example: 1
        total:
          description: Total count of records in result set
          type: integer
          example: 1
      type: object
    ForbiddenResponse:
      title: Forbidden Response
      properties:
        error:
          description: Description of detected error in request
          type: string
          example: This action is unauthorized.
      type: object
    ResourceNotFoundResponse:
      title: Resource Not Found Response
      properties:
        error:
          description: Description of detected errors in request
          type: string
      type: object
    EmptyResponse:
      title: Empty Response
      type: object
      additionalProperties: false
    Designation:
      title: Designation
      properties:
        city:
          description: The name of the city associated with the Designation
          type:
          - string
          - 'null'
          maxLength: 100
          example: San Diego
        created_at:
          description: Date/time of initial record creation
          type: string
          format: date-time
          example: '2021-04-23T08:23:21Z'
        description:
          description: A brief description of the Designation
          type:
          - string
          - 'null'
          maxLength: 4095
          example: My Designation Description
        end_time:
          description: Date/time that record ends
          type:
          - string
          - 'null'
          example: '2021-04-23 08:23:21'
        external_reference_id:
          description: Primary identifier of associated Member
          type:
          - string
          - 'null'
          maxLength: 100
          example: my_unique_identifier
        goal:
          description: The fundraising goal for the Designation
          type:
          - string
          - 'null'
          format: float
          minimum: 0
          example: '1000.0'
        id:
          description: Primary identifier of record
          type: integer
          example: 34672
        is_active:
          description: Indicates whether Designation is active
          type: boolean
          example: true
        is_complete:
          description: Indicates whether Designation is complete
          type: boolean
          example: false
        is_default:
          description: Indicates whether this is the default Designation for the organization. Only one Designation per Organization can have this be true
          type: boolean
          example: false
        name:
          description: Name of the Designation, unique to this Organization
          type:
          - string
          - 'null'
          maxLength: 127
          example: My Designation Name
        organization_id:
          description: Primary identifier of associated Organization
          type: integer
          example: 82364
        postal_code:
          description: Postal code associated with the Designation
          type:
          - string
          - 'null'
          maxLength: 10
          example: '90210'
        start_time:
          description: Date/time that record starts
          type:
          - string
          - 'null'
          example: '2021-04-23 08:23:21'
        state:
          description: Two-letter abbreviation of the state associated with the Designation
          type:
          - string
          - 'null'
          maxLength: 2
          minLength: 2
          example: CA
        updated_at:
          description: Date/time of last record update
          type: string
          format: date-time
          example: '2021-04-23T10:25:03Z'
      type: object
    DesignationFillable:
      title: Designation Fillable
      properties:
        city:
          description: The name of the city associated with the Designation
          type:
          - string
          - 'null'
          maxLength: 100
          example: San Diego
        description:
          description: A brief description of the Designation
          type:
          - string
          - 'null'
          example: My Designation Description
        end_date:
          description: Date that record ends
          type:
          - string
          - 'null'
          format: date-time
          example: '2021-04-23T08:23:21Z'
        end_time:
          description: Time that record ends
          type:
          - string
          - 'null'
          format: date-time
          example: '2021-04-23T08:23:21Z'
        external_reference_id:
          description: Primary identifier of associated Member
          type:
          - string
          - 'null'
          maxLength: 100
          example: my_unique_identifier
        goal:
          description: The Fundraising Goal for the Designation
          type:
          - string
          - 'null'
          format: float
          minimum: 1
          example: '1000.0'
        is_active:
          description: Indicates whether Designation is active
          type: boolean
          default: false
          example: true
        is_complete:
          description: Indicates whether Designation is complete
          type: boolean
          default: false
          example: false
        is_default:
          description: Indicates whether this is the default Designation for the Organization. Only one Designation per Organization can have this be true
          type: boolean
          default: false
          example: false
        name:
          description: Name of the Designation, unique to this Organization
          type: string
          maxLength: 127
          example: My Designation Name
        postal_code:
          description: Postal code associated with the Designation
          type:
          - string
          - 'null'
          maxLength: 50
          example: '90210'
        start_date:
          description: Date that record starts
          type: string
          format: date-time
          example: '2021-04-23T08:23:21Z'
        start_time:
          description: Time that record starts
          type: string
          format: date-time
          example: '2021-04-23T08:23:21Z'
        state:
          description: Two-letter abbreviation of the state associated with the Designation
          type:
          - string
          - 'null'
          maxLength: 2
          minLength: 2
          example: CA
      type: object
    PaginationLink:
      description: Object referencing a page for the resource queried that can be used to fetch that page.
      properties:
        label:
          description: Identifier of the page.
          type: string
          example: '1'
        url:
          description: URL that can be used to fetch associated page of records.
          type:
          - string
          - 'null'
          example: '{host}/{resource}?page=1'
        active:
          description: Identifies whether the previously requested page matches the page this link object references.
          type: boolean
          example: true
      type: object
  parameters:
    per_page:
      name: per_page
      in: query
      description: Number of entries to return in each page of results
      required: false
      schema:
        type: integer
        example: 20
    page:
      name: page
      in: query
      description: Indicator of which page of results to return
      required: false
      schema:
        type: integer
        example: 1
  securitySchemes:
    OAuth2Application:
      type: oauth2
      description: OAuth bearer token for client application
      flows:
        clientCredentials:
          tokenUrl: /oauth2/auth
          refreshUrl: /oauth2/auth
          scopes:
            read: Read access
            write: Write access
    OAuth2Member:
      type: oauth2
      description: OAuth bearer token for client application with additional member context
      flows:
        password:
          tokenUrl: /oauth2/auth
          refreshUrl: /oauth2/auth
          scopes:
            read: Read access
            write: Write access