GoFundMe Engagement Settings API

Organization specific settings related to engagements such as email and SMS settings. We can set SMS numbers or email DNS, throttling etc.

Documentation

Specifications

Other Resources

OpenAPI Specification

gofundme-engagement-settings-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GoFundMe Pro Engagement Settings 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: Engagement Settings
  description: Organization specific settings related to engagements such as email and SMS settings. We can set SMS numbers or email DNS, throttling etc.
paths:
  /organizations/{id}/engagement-settings:
    get:
      tags:
      - Engagement Settings
      summary: fetchOrganizationEngagementSettings
      description: Fetch Engagement Settings for specified Organization
      operationId: fetchOrganizationEngagementSettings
      parameters:
      - name: id
        in: path
        description: Primary identifier of Organization
        required: true
        schema:
          type: integer
          example: 82364
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngagementSettings'
        '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'
  /engagement-settings/{id}:
    put:
      tags:
      - Engagement Settings
      summary: updateOrganizationEngagementSettings
      description: Update Engagement Settings for Organization
      operationId: updateOrganizationEngagementSettings
      parameters:
      - name: id
        in: path
        description: Primary identifier of Engagement Settings
        required: true
        schema:
          example: 5ceeb33d6e201a648239a387
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EngagementSettingsFillable'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngagementSettings'
        '403':
          description: Requester is not authorized to perform action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Engagement Settings not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundResponse'
      security:
      - OAuth2Member: []
components:
  schemas:
    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
    EngagementSettings:
      title: Engagement Settings
      type: object
      allOf:
      - properties:
          id:
            description: Primary identifier of Engagement Settings
            type: string
            example: 5ceeb33d6e201a648239a387
          organization_id:
            description: ID of the Organization for which Engagement settings belongs
            type: integer
            example: 82374
          created_at:
            description: Date/time of initial Engagement Settings creation
            type: string
            format: date-time
            example: '2019-04-23T10:25:03Z'
          updated_at:
            description: Date/time of Engagement Settings last updated
            type: string
            format: date-time
            example: '2019-04-23T10:25:03Z'
        type: object
      - $ref: '#/components/schemas/EngagementSettingsFillable'
    EngagementSettingsFillable:
      title: Engagement Settings Fillable
      properties:
        email_subdomain:
          description: Email subdomain
          type: string
          example: test12-org-2018102512405088
        sms:
          description: Details of Engagement Settings for SMS
          properties:
            enabled:
              description: Indicates whether SMS is enabled or not in Engagement Settings
              type: boolean
              example: true
            phone_numbers:
              description: Phone numbers for sending SMS
              type: array
              items:
                type: string
                example: 1-555-555-555
            custom_caller_id:
              description: Custom Caller ID name for sending SMS
              type:
              - string
              - 'null'
              example: John Doe
          type: object
        email:
          description: Details of Engagement Settings for email
          properties:
            custom_domain:
              description: Indicates whether custom domain for email is true or false
              type: boolean
              example: false
            domain_prefix:
              description: Domain prefix name for email
              type: string
              example: test-org-2018102512405088
            email_domain:
              description: Domain name for email
              type: string
              example: gofundme-pro-mail.org
            enabled:
              description: Indicates whether email is enabled or not
              type: boolean
              example: true
            throttling:
              description: Details of throttling:The amount of email messages sent to one ISP or remote server at one tim
              properties:
                emails_per_day:
                  description: Number of emails sent per day
                  type: integer
                  example: 1000
                emails_per_month:
                  description: Number of emails sent per month
                  type: integer
                  example: 10000
              type: object
            dns:
              description: Details of DNS settings
              properties:
                is_valid:
                  description: Indicates whether DNS is valid or not
                  type: boolean
                  example: true
                spf:
                  description: A type of DNS record that identifies which mail servers are permitted to send an email on behalf of your domain
                  properties:
                    txt_record:
                      description: Name of SPF records to be included
                      type: string
                      example: v=spf1 include:classy.org ~all
                    valid:
                      description: Indicates whether SPF is valid or not
                      type: boolean
                      example: true
                  type: object
                dkim:
                  description: DKIM Records include a signature in each email header sent
                  properties:
                    txt_record:
                      description: Signature in each email header sent
                      type: string
                      example: k=rsa; p=MIGfMA0GCSqGSIb3DQ...
                    valid:
                      description: Indicates if DKIM is valid or not
                      type: boolean
                      example: true
                  type: object
                tracking:
                  description: Details of Tracking
                  properties:
                    cname:
                      description: Cname allow for tracking of opens and clicks
                      type: string
                      example: email.domain.com
                    value:
                      description: Value for tracking
                      type: string
                      example: mailgun.org
                    valid:
                      description: Indicates whether tracking is valid or not
                      type: boolean
                      example: true
                  type: object
                incoming:
                  description: Details of Incoming
                  properties:
                    mx_records:
                      description: The MX-record contains the host name of the computer(s) that handle the emails for a domain and a prioritization code
                      type: array
                      items:
                        properties:
                          priority:
                            description: Each MX record has a priority, or a number to designate the order in which your domain name's incoming mail servers receive your email messages
                            type: number
                            example: 10
                          value:
                            description: A mail exchanger record (MX record) specifies the mail server responsible for accepting email messages on behalf of a domain name
                            type: string
                            example: mxa.mailgun.org
                        type: object
                    valid:
                      description: Indicates whether incoming is valid or not
                      type: boolean
                      example: true
                  type: object
              type: object
          type: object
      type: object
  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