components:
  parameters:
    Fields:
      allowReserved: true
      description: |
        Fields provides optional filtering based on query string parameters specifying sparse fieldsets. Clients can pass 'fields[TYPE]' as a query parameter in order to specify which fields (comma separated values) are to be returned. All available fields not specified will be filtered out. Not specifying any fields filter returns all available fields. This param adheres roughly to the JSON:API https://jsonapi.org/format/#fetching-sparse-fieldsets.
      in: query
      name: fields
      schema:
        additionalProperties:
          type: string
        type: object
      style: deepObject
      x-public: true
    FilterAddressID:
      description: Filter by the ID of an address.
      in: query
      name: filter[address.id]
      schema:
        example: 21785cf5-944f-4f1b-a97a-a9b8dff1d91a
        format: uuid
        type: string
      x-public: true
    FilterAuthDate:
      description: |
        Filter donations by the date/time they were recorded where auth_date is a valid:
          - RFC3339 date/time (e.g. `2006-01-02T15:04:05-07:00`)
          - MySQL-style date/time (e.g. `2006-01-02 15:04:05`)
          - Date-only string (e.g. `2006-01-02`)

        Supports `>`, `>=`, `<`, `<=` `=`, and `!=` comparison operators. Multiple auth_date filters can be used in
        a single request (e.g. `?filter[auth_date]=<1996-12-18T16:39:57-08:00&filter[auth_date]=>1996-12-19T16:39:57-08:00`)

        If the filter value uses the RFC3339 format, then the time zone specified in the filter value will be converted
        to UTC and compared with the auth_date of the Donation in UTC. If the filter value uses one of the other supported
        formats and therefore doesn't contain time zone details, the auth_date of the Donation will be converted to
        the time zone it was recorded in and then compared with the filter value string. This allows for the flexibility
        to include all donations based on the time zone setting of the organization at the time of the donation.

        For example, let's say we have these 2 donations:
          - Donation A is recorded as `2024-01-01T02:00:00Z` with a time zone of `America/New_York` which would mean it
            was actually given at 21:00:00 on 12/31/2023 EST.
          - Donation B is recorded as `2024-01-01T05:00:00Z` with a time zone of `America/New_York` which would mean it
            was given at 00:00:00 on 1/1/2024 EST.

        Since those donations were given, the organization has updated their time zone to `America/Los_Angeles`.

        RFC3339:
          - `?filter[auth_date]=>2024-01-01T00:00:00Z&filter[auth_date]=<2024-12-31T23:59:59Z`:
            This would return both donations since we're comparing with UTC timestamps even though technically Donation A
            was given on the last day of the previous year due to the time zone offset.

          - `?filter[auth_date]=>2024-01-01T00:00:00-05:00&filter[auth_date]=<2024-12-31T23:59:59-05:00`:
            This would accurately only include Donation B since Donation A in the time zone offset specified was 3 hours
            before the specified time window.

          - `?filter[auth_date]=>2024-01-01T00:00:00-08:00&filter[auth_date]=<2024-12-31T23:59:59-08:00`:
            This would return 0 Donations since both Donation A and B occurred before the specified time window.

        MySQL-style date/time:
          - `?filter[auth_date]=>2024-01-01 00:00:00&filter[auth_date]=<2024-12-31 23:59:59`:
          Since these strings don't contain a time zone offset, they will be compared to the auth_date in the recorded
          time zone. For Donation A that would be `2024-12-31 21:00:00` and Donation B would be `2024-01-01 00:00:00`.
          Comparing the values in this format would properly include Donation B but NOT Donation A.

        Date-only:
          - `?filter[auth_date]=>2024-01-01&filter[auth_date]=<2024-12-31`:
          When a time isn't included, we will assume the beginning of the day for `greater-than` comparisons and the
          end of the day for `less-than` comparisons. The filters in this scenario would act as if you passed in
          `?filter[auth_date]=>2024-01-01 00:00:00&filter[auth_date]=<2024-12-31 23:59:59` and would properly include
          Donation B but NOT Donation A.

          - `?filter[auth_date]=2024-01-01`:
          This filter assumes you want everything processed for that day in the time zone it was recorded in. This
          filter is functionally equivalent to using `?filter[auth_date]=>2024-01-01 00:00:00&filter[auth_date]=<2024-01-01 23:59:59`
          and would properly only return Donation B.

          - `?filter[auth_date]=!2024-01-01`:
          This filter assumes you want everything NOT processed on that day in the time zone it was recorded in. This
          filter is functionally equivalent to using `?filter[auth_date|auth_date]=<2023-12-31 23:59:59|>2024-01-02 00:00:00`
          and would properly return Donation A but NOT Donation B.
      example: "1996-12-19T16:39:57-08:00"
      in: query
      name: filter[auth_date]
      schema:
        format: date-time
        type: string
      x-public: true
    FilterAuthDateMax:
      description: |
        Latest auth date to filter records by where auth_date is a valid:
          - RFC3339 date/time (2006-01-02T15:04:05Z07:00)
          - MySQL-style date/time (2006-01-02 15:04:05)
          - date only string
        Supports the `=` operator only.
        This filter is equivalent to using the less-than operator with the auth_date filter. See the `auth_date`
        filter for details on how date/time strings are handled.
        e.g. `?filter[auth_date.max]=2038-01-19T03:14:07-00:00` will return records before this date.
      example: "2038-01-19T03:14:07Z"
      in: query
      name: filter[auth_date.max]
      schema:
        format: date-time
        type: string
      x-public: true
    FilterAuthDateMin:
      description: |
        Earliest auth date to filter records by where auth_date is a valid:
          - RFC3339 date/time (2006-01-02T15:04:05Z07:00)
          - MySQL-style date/time (2006-01-02 15:04:05)
          - date only string

        Supports the `=` operator only.
        This filter is equivalent to using the greater-than operator with the auth_date filter. See the `auth_date`
        filter for details on how date/time strings are handled.
        e.g. `?filter[auth_date.min]=1996-12-19T16:39:57-08:00` will return records after this date.
      example: "1996-12-19T16:39:57-08:00"
      in: query
      name: filter[auth_date.min]
      schema:
        format: date-time
        type: string
      x-public: true
    FilterCreatedAt:
      description: Filter by the resource's created_at value.
      in: query
      name: filter[created_at]
      schema:
        format: date-time
        type: string
      x-public: true
    FilterDOBDay:
      description: Filter profile by date-of-birth day.
      in: query
      name: filter[dob_day]
      schema:
        type: integer
      x-public: true
    FilterDOBMonth:
      description: Filter profile by date-of-birth month.
      in: query
      name: filter[dob_month]
      schema:
        type: integer
      x-public: true
    FilterDateOfBirth:
      description: Filter profile date-of-birth.
      in: query
      name: filter[date_of_birth]
      schema:
        example: "1981-05-23"
        format: date
        type: string
      x-public: true
    FilterEmail:
      description: Filter by primary email address. Wildcards not supported.
      in: query
      name: filter[email]
      schema:
        type: string
      x-public: true
    FilterEmails:
      description: Filter by secondary email addresses. Wildcards not supported.
      in: query
      name: filter[emails]
      schema:
        type: string
      x-public: true
    FilterExternalID:
      description: Filter by an external_id of a Profile.
      in: query
      name: filter[external_id]
      schema:
        type: string
      x-public: true
    FilterExternalUserID:
      description: Filter by an external user id (known by an external auth provider)
      in: query
      name: filter[external_user_id]
      schema:
        type: string
      x-public: true
    FilterFirstName:
      description: Filter by the first name field. Wildcards not supported.
      in: query
      name: filter[first_name]
      schema:
        type: string
      x-public: true
    FilterGender:
      description: Filter profile gender.
      in: query
      name: filter[gender]
      schema:
        example: male
        type: string
      x-public: true
    FilterGraduationYear:
      description: |
        Filter profile by graduation year. This is currently only intended to be used to fetch profiles with existing academic grades
        (i.e. `filter[graduation_year]=!null`).
      in: query
      name: filter[graduation_year]
      schema:
        type: integer
      x-public: true
    FilterHouseholdExternalID:
      description: Filter by an external_id of a Household.
      in: query
      name: filter[external_id]
      schema:
        type: string
      x-public: true
    FilterID:
      description: Filter by resource id
      in: query
      name: filter[id]
      schema:
        format: uuid
        type: string
      x-public: true
    FilterLastName:
      description: Filter by the last name field. Wildcards not supported.
      in: query
      name: filter[last_name]
      schema:
        type: string
      x-public: true
    FilterOrg:
      description: Filter by resource org_key
      in: query
      name: filter[org_key]
      schema:
        pattern: /[A-Z0-9]{8}/
        type: string
      x-public: true
    FilterPhone:
      description: Filter by phone number. Wildcards not supported.
      in: query
      name: filter[phone]
      schema:
        $ref: '#/components/schemas/PhoneNumber'
      x-public: true
    FilterPhones:
      description: Filter by alternate phone numbers. Wildcards not supported.
      in: query
      name: filter[phones]
      schema:
        $ref: '#/components/schemas/PhoneNumber'
      x-public: true
    FilterShortID:
      description: Filter by the primary_key of a resource.
      in: query
      name: filter[short_id]
      schema:
        type: integer
      x-public: true
    FilterStatus:
      description: |
        Filter profiles by status. In order to return profiles of all statuses use filter[status]=*
      in: query
      name: filter[status]
      schema:
        default: active
        enum:
        - '*'
        - active
        - archived
        - merged
        - gdpr
        type: string
      x-public: true
    FilterUpdatedAt:
      description: Filter by the resource's updated_at value.
      in: query
      name: filter[updated_at]
      schema:
        format: date-time
        type: string
      x-public: true
    FilterUpdatedAtMax:
      description: |
        Latest updated_at to filter donations by where updated_at is a valid RFC3339 date. Supports the `=` operator.
        e.g. `?filter[updated_at.max]=1996-12-19T16:39:57-08:00` will return donations updated before this date.
      example: "2038-01-19T03:14:07Z"
      in: query
      name: filter[updated_at.max]
      schema:
        format: date-time
        type: string
      x-public: true
    FilterUpdatedAtMin:
      description: |
        Earliest updated_at to filter donations by where updated_at is a valid RFC3339 date. Supports the `=` operator.
        e.g. `?filter[updated_at.min]=1996-12-19T16:39:57-08:00` will return donations updated after this date.
      example: "2038-01-19T03:14:07Z"
      in: query
      name: filter[updated_at.min]
      schema:
        format: date-time
        type: string
      x-public: true
    MediaItemIncludes:
      description: Support for including _embedded resources.
      explode: false
      in: query
      name: include
      schema:
        items:
          enum:
          - images
          - audio
          - video
          - document
          - broadcast
          - live-template
          type: string
        type: array
      style: form
      x-public: true
    Page:
      description: |
        Supports pagination of results.
        - `page[size]` is used to define the number of results to return per page
        - `page[number]` specifies which page of results to return.
        See [Pagination](https://api-docs.subsplash.net/#tag/Pagination) for more details.
      explode: true
      in: query
      name: page
      schema:
        properties:
          number:
            default: 1
            description: The page number to return `page[size]` of results
            minimum: 1
            type: integer
          size:
            default: 25
            description: The number of results to return per page
            maximum: 100
            minimum: 1
            type: integer
        type: object
      style: deepObject
      x-public: true
    PagePublic:
      description: |
        Supports pagination of results.
        - `page[size]` is used to define the number of results to return per page
        - `page[number]` specifies which page of results to return.

        See [Pagination](https://openapi.docs.subsplash.net/#tag/Pagination) for more details.
      explode: true
      in: query
      name: page
      schema:
        properties:
          number:
            default: 1
            description: The page number to return `page[size]` of results
            minimum: 1
            type: integer
          size:
            default: 20
            description: The number of results to return per page
            maximum: 100
            minimum: 1
            type: integer
        type: object
      style: deepObject
      x-public: true
    PaymentIncludes:
      description: Comma separated list of embedded fields to include.
      in: query
      name: include
      schema:
        enum:
        - form-response
        - form-response.form
        - submission
        - submission.payment-form
        - donation
        - remote-deposit-item
        - instrument
        - end-user
        - end-user.profiles
        - profile
        - refunds
        - refunds.issued-by
        - payout
        type: string
      x-public: true
    Sort:
      description: |
        A comma-separated list of fields with directions.
        There are two directions for sorting: ascending and descending. To specify a direction, prepend the field name with `+` for ascending or `-` for descending. Ascending (`+`) is implied if a direction (`+` or `-`) is not specified.
        See [Sorting](https://api-docs.subsplash.net/#tag/Sorts) for more details.
      in: query
      name: sort
      schema:
        anyOf:
        - enum:
          - created_at
          - -created_at
          type: string
        default: -created_at
        type: string
      style: form
      x-public: true
    SortProfiles:
      description: |
        A comma-separated list of fields with directions.
        There are two directions for sorting: ascending and descending. To specify a direction, prepend the field name with `+` for ascending or `-` for descending. Ascending (`+`) is implied if a direction (`+` or `-`) is not specified.
        See [Sorting](https://api-docs.subsplash.net/#tag/Sorts) for more details.
      in: query
      name: sort
      schema:
        anyOf:
        - enum:
          - created_at
          - -created_at
          - updated_at
          - -updated_at
          - first_name
          - -first_name
          - last_name
          - -last_name
          - email
          - -email
          - id
          - -id
          type: string
        default: -created_at
        type: string
      style: form
      x-public: true
    UUID:
      description: The unique identifier
      in: path
      name: id
      required: true
      schema:
        description: The unique identifier for the resource.
        example: 21785cf5-944f-4f1b-a97a-a9b8dff1d91a
        format: uuid
        readOnly: true
        type: string
      x-public: true
  responses:
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Bad Request
      x-public: true
    BadRequest_public:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse_public'
      description: Bad Request
      x-public: true
    BadRequestPublic:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponsePublic'
      description: Bad Request
      x-public: true
    ConflictPublic:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponsePublic'
      description: Conflict
      x-public: true
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Forbidden
      x-public: true
    Forbidden_public:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse_public'
      description: Forbidden
      x-public: true
    ForbiddenPublic:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponsePublic'
      description: Forbidden
      x-public: true
    Found:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Found
      x-public: true
    InternalError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Internal Error
      x-public: true
    InternalServerError_public:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse_public'
      description: Internal Server Error
      x-public: true
    InternalServerErrorPublic:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponsePublic'
      description: Internal Server Error
      x-public: true
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Not Found
      x-public: true
    NotFound_public:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse_public'
      description: Not Found
      x-public: true
    NotFoundPublic:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponsePublic'
      description: Not Found
      x-public: true
    TooManyRequests:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Too Many Requests
      headers:
        Retry-After:
          schema:
            description: The number of seconds to wait before retrying the request
            type: string
      x-public: true
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Unauthorized
      x-public: true
    Unauthorized_public:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse_public'
      description: Unauthorized
      x-public: true
    UnauthorizedPublic:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponsePublic'
      description: Unauthorized
      x-public: true
    UnknownError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Unknown Error
      x-public: true
    UnprocessableEntity:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Unprocessable Entity
      x-public: true
    UnprocessableEntityPublic:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponsePublic'
      description: Unprocessable Entity
      x-public: true
  schemas:
    AcademicGrade:
      description: An object defining the user's academic grade. This field is not
        stored in the database, but is calculated based on the user's graduation_year.
      properties:
        name:
          description: The name of the academic grade (e.g. "4th").
          type: string
        value:
          description: The value or ID of the academic grade. Currently these values
            also correspond to grade order.
          type: integer
      type: object
      x-public: true
    Address:
      properties:
        _embedded:
          description: Embeded properties of the address
          type: object
        _links:
          $ref: '#/components/schemas/SelfLinkPublic'
        app_key:
          description: Six character app code
          pattern: ^[A-Z0-9]{6}$
          type: string
        city:
          description: The city in which the address is located
          type: string
        country:
          description: The country in which the address is located
          type: string
        created_at:
          description: Moment when the address was created
          format: date-time
          type: string
        deleted_at:
          description: Moment when the address was deleted
          format: date-time
          type: string
        id:
          description: Unique identifier of address object
          format: uuid
          type: string
        latitude:
          description: The latitude of the address
          type: number
        longitude:
          description: The longitude of the address
          type: number
        postal_code:
          description: The postal code in which the address is located
          type: string
        state:
          description: The state in which the adress is located
          type: string
        street:
          description: The street name of the address
          type: string
        updated_at:
          description: Moment when the address was updated
          format: date-time
          type: string
      type: object
      x-public: true
    Adjustment:
      description: |
        An adjustment is a transfer of funds between two accounts (the main subsplash account and a client's connected account) within the payfac. This includes GrowCurve rebates and Month End Billing invoices.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    AdjustmentSummary:
      description: A summary of the adjustments made in a semi-human-readable format
      properties:
        changes:
          description: A collection of changes derived from the adjustments
          items:
            properties:
              new:
                example: Krusty The Clown
                type: string
              old:
                example: Bozo The Clown
                type: string
            type: object
          type: array
        created_at:
          description: Moment when the adjustment was created in UTC.
          format: date-time
          type: string
        user:
          description: The user who initiated the change
          properties:
            first_name:
              example: Ted
              type: string
            last_name:
              example: Lasso
              type: string
          type: object
      type: object
      x-public: true
    AnalyticsSummary:
      properties:
        average_gift_amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The average gift amount
      type: object
    App:
      properties:
        _embedded:
          description: Embedded proeprties of the app.
          type: object
        _links:
          $ref: '#/components/schemas/SelfLinkPublic'
        cancelled:
          description: Indicates whether the app is cancelled
          type: boolean
        created_at:
          description: Moment when the app was created
          format: date-time
          type: string
        deleted_at:
          description: Moment when the app was deleted
          format: date-time
          type: string
        id:
          description: Unique identifier of app object
          format: uuid
          type: string
        internal_title:
          description: The internal title of the app.
          type: string
        is_container:
          description: Indicates whether the app is a container
          type: boolean
        short_code:
          description: Short unique identifier of the app.
          pattern: ^[a-z0-9]{7}$
          readOnly: true
          type: string
        timezone:
          $ref: '#/components/schemas/Timezone'
        title:
          description: The title of the app.
          type: string
        updated_at:
          description: Moment when the app was updated
          format: date-time
          type: string
      type: object
      x-public: true
    AppInstall:
      description: AppInstall holds the ID of a single app install (AppInstallID)
        for a particular user. Note that a user could have many AppInstallIDs (one
        for each device on which they have the app installed).
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    Attachment:
      properties:
        _embedded:
          $ref: '#/components/schemas/AttachmentEmbedded'
        created_at:
          description: Moment when the attachment was created
          format: date-time
          type: string
        type:
          description: The type of the attachment
          type: string
      type: object
      x-public: true
    AttachmentEmbedded:
      description: Embedded properties of the attachment
      properties:
        link:
          allOf:
          - x-public: true
          - $ref: '#/components/schemas/PagesLink'
      type: object
      x-subsplash-sdk:
        fieldResourceTypes:
          album: Album
          calendar: Calendar
          event: Event
          group-event: GroupEvent
          link: Link
          list: List
          media-item: MediaItem
          media-series: MediaSeries
          rss: RSS
          song: Song
    AttendanceRes:
      description: Response of a resource that logs the attendance of group members
        (end-users) to events/sessions.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    AuthProvider:
      description: |
        An AuthProvider defines the details around a specific remote Identify Provider that will be used for authentication. There is a relationship of AuthProvider to a GO Struct that defines the specifics of how this auth provider functions.
      properties:
        auth_handler:
          description: Used by the app to identify the native handler that should
            be used to initiate the auth flow
          type: string
        basic_auth_creds:
          description: |
            Used when the Identify Provider requires basic authentication. This is usually a requirement around custom third party Identify Providers in dev/stage
          type: string
        basic_auth_host:
          description: |
            Used when the Identify Provider requires basic authentication. This is usually a requirement around custom third party Identify Providers in dev/stage
          type: string
        color:
          description: The color used when displaying the auth provider in the UI
          type: string
        content_domain:
          description: |
            A comma separated list of domains that the Identity Providers Access Token should be sent to when the app communicates with an endpoint on the domain.
            when the app communicates with an endpoint on the domain.
          type: string
        icon:
          description: AuthProvider's icon.
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
        is_global:
          description: |
            Dictates whether an AuthProvider is globally scoped. Globally scoped auth providers do not require an AuthProviderContext, unlike normal login AuthProviders.
          type: boolean
        login_cookie_host:
          deprecated: true
          description: |
            When a user logs out in the app, it will clear all the cookies on the login_cookie_host for each auth
            provider associated with the app. We currently only use this for enterprise auth providers like Ligonier
            and Wild at Heart that have web views in the app with protected content, along with giving, for when an
            end-user decides to log out, and we want to clear their cookies in the web view.
          type: string
        override_change_email_url:
          description: A URL the app can use to allow changing of an email at a custom
            Identity Provider.
          type: string
        override_change_password_url:
          description: A URL the app can use to allow changing of a users password
            at a custom Identity Provider.
          type: string
        platforms:
          description: A comma separated list of allowed platforms used to help filter
            configurations for specific platforms and platform versions. The filtering
            should occur in the feeds project. Currently allowed values can include
            web, ios and android, but more platform types can be added in the future.
            The order of the items in the list doesn't matter. If this value is null
            or empty (the default), then it's assumed that this AuthProvider is allowed
            for any and all platform types.
          type: string
        service_key:
          description: The key used when communicating with the Identity Provider.
          type: string
        service_name:
          description: The name that identifies this auth provider. This is used to
            map the auth provider to a class in GO.
          type: string
        service_secret:
          description: The secret used when communicating with the Identity Provider.
          type: string
        title:
          description: The title used when displaying the auth provider in the UI
          type: string
        trusted_login_service:
          default: false
          description: |
            When a user logs in with this Identity Provider but has previously logged in with a different identify provider using the same email address, then, IF the service is considered trusted, the accounts will be linked. If the Auth Provider is not considered trusted, we will not link the accounts.
          type: boolean
        verified_login:
          default: false
          description: |
            A flag attached to the access token that is used by our giving system to determine if the login provider can be trusted
          type: boolean
      type: object
      x-public: true
    AuthProviderContext:
      description: |
        An object that represents the relationship between an app_key and the Auth Provider. These are used to tell the system what AuthProviders are available for a specific app, as well as any app specific details.
        for that auth provider (currently required for Apple)
      properties:
        _links:
          allOf:
          - properties:
              auth_url:
                properties:
                  href:
                    type: string
                type: object
              token_url:
                properties:
                  href:
                    type: string
                type: object
          - $ref: '#/components/schemas/Links'
      type: object
    AuthProviderReturnURL:
      description: |
        An AuthProviderReturnURL defines a return URL that an authProvider allows to be used for user redirection at the end of their OAuth2 flow.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    Batch:
      description: A batch is a collection of donations typically organized by the
        name of the batch. Batches also provide a summary of data for the collection
        of donations.
      properties:
        _embedded:
          description: The embedded resources on a batch.
          properties:
            committed-by:
              description: Client account this batch was committed by.
              properties:
                email:
                  example: bob@loblaw.com
                  format: email
                  maxLength: 255
                  type: string
                first_name:
                  example: Bob
                  maxLength: 35
                  type: string
                id:
                  description: The unique identifier for this client_account.
                  format: uuid
                  type: string
                is_primary_contact:
                  description: Whether or not the client account is a primary contact.
                  type: boolean
                last_name:
                  example: Loblaw
                  maxLength: 35
                  type: string
                org_key:
                  description: The organization to whom this client account belongs.
                  example: SUBSPLSH
                  format: /[A-Z0-9]{8}/
                  type: string
                phone:
                  description: An un-formatted phone number. Follows the E.164 standard
                    which allows for up to 15 digits for a complete international
                    phone number.
                  example: "5058425662"
                  pattern: '[0-9]{10,15}'
                  type: string
              required:
              - id
              type: object
            org:
              description: The organization this batch belongs to.
              properties:
                id:
                  description: The unique identifier for this donation.
                  example: SUBSPLSH
                  format: 8 character org_key
                  type: string
              type: object
            remote-deposit:
              description: Remote deposit this batch belongs to.
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  readOnly: true
                  type: string
              type: object
          type: object
        committed_at:
          description: Moment when the resource was committed in UTC.
          format: date-time
          type: string
        created_at:
          description: Moment when the resource was created in UTC.
          format: date-time
          type: string
        designation_count:
          description: The computed number of designations in this batch.
          example: 3
          minimum: 0
          type: integer
        donation_count:
          description: The computed number of donations in this batch.
          example: 3
          minimum: 0
          type: integer
        id:
          description: The unique identifier for this batch.
          example: e15ec359-1959-4b8e-a3f5-379d413e67d3
          format: uuid
          type: string
        imported:
          description: Whether or not the batch was imported.
          type: boolean
        name:
          description: The name of the batch.
          example: Sunny City First Service
          maxLength: 64
          minLength: 1
          type: string
        org_key:
          description: The organization to whom this batch belongs.
          example: SUBSPLSH
          format: /[A-Z0-9]{8}/
          type: string
        state:
          description: The state of the batch.
          enum:
          - in_progress
          - committed
          example: in_progress
          type: string
        total:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The total amount of donations in this batch.
        updated_at:
          description: Moment when the resource was most recently updated in UTC.
          format: date-time
          type: string
      type: object
      x-public: true
    BulkTopicSubscription:
      description: |
        TopicSubscription is a representation of a subscription between a user's PlatformEndpoint and a Topic.  In this case,
        a user's PlatformEndpoint(s) are derived from ExternalUser information.
      properties:
        _embedded:
          description: Embedded properties of topic subscription.
          properties:
            external-user:
              $ref: '#/components/schemas/ExternalUser'
            topic:
              $ref: '#/components/schemas/Topic'
          type: object
        _links:
          $ref: '#/components/schemas/SelfLinkPublic'
        app_key:
          description: Six character app code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        aws_sns_subscription_arn:
          description: The aws sns subscription arn.
          type: string
        created_at:
          description: Moment when the topic subscription was created.
          format: date-time
          type: string
        deleted_at:
          description: Moment when the topic subscription was deleted.
          format: date-time
          type: string
        id:
          description: Unique identifier of topic subscription object.
          format: uuid
          type: string
        updated_at:
          description: Moment when the topic subscription was updated.
          format: date-time
          type: string
      type: object
      x-public: true
    Calendar:
      properties:
        _embedded:
          properties:
            events:
              items:
                $ref: '#/components/schemas/Event'
              type: array
            images:
              items:
                properties:
                  id:
                    description: image associated with the calendar
                    format: uuid
                    type: string
                type: object
              type: array
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              events: Event
              images: files.Image
        _links:
          $ref: '#/components/schemas/Link'
        app_key:
          example: ABDCDE
          type: string
        color:
          description: Hex color of Calendar
          pattern: ^#[a-fA-F0-9]{6}
          type: string
        created_at:
          description: Date time when the resource was created
          format: date-time
          readOnly: true
          type: string
        deleted_at:
          description: Date time when the resource was deleted
          format: date-time
          readOnly: true
          type: string
        domain:
          default: general
          enum:
          - general
          - group
          type: string
        ical_url:
          example: http://faith-outreach.ccbchurch.com/w_calendar_sub.ics
          type: string
        id:
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
          format: uuid
          readOnly: true
          type: string
        published:
          default: false
          description: a flag indicating if the calendar has been published or not
          type: boolean
        published_at:
          description: Date time when the resource was published
          format: date-time
          readOnly: true
          type: string
        short_code:
          example: 82jvt2y
          pattern: ^\w{7}$
          type: string
        status:
          default: draft
          description: Publishing status of item.
          enum:
          - draft
          - scheduled
          - published
          type: string
        subtitle:
          example: Fellowship of the Ring
          type: string
        title:
          example: The Lord of the Rings
          type: string
        updated_at:
          description: Date time when the resource was last updated
          format: date-time
          readOnly: true
          type: string
        used_directly_by_tab:
          description: |
            Whether the calendar is being used as the top-level content source
            of a Mobile Tab. Will be true regardless of the tab being active or
            inactive. It does not account for calendars that are used within Lists.

            Only included if `fields[calendar]` query param includes `used_directly_by_tab`.
          nullable: true
          type: boolean
      required:
      - app_key
      - title
      - color
      type: object
      x-public: true
    Campaign:
      description: A campaign drive featuring an optional financial goal and optionally
        time bound that end-users can donate to.
      properties:
        given:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The net amount given towards the campaign.
        goal:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The financial goal of the campaign.
        gross_given:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The gross amount given towards the campaign.
        pledged_amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount pledged toward the campaign.
        total_fees:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The total fees collected against a campaign.
      type: object
    CampaignContribution:
      description: A collection of end-user pledge and contribution data
      properties:
        given_amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount of money that this end-user has given for this campaign.
        pledged_amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount of money that this end-user has pledged for this
            campaign.
        total_fees:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The total fees collected for this end-user and campaign
      type: object
    CampaignInfo:
      description: An aggregation of data for the given campaign.
      properties:
        given_amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount given towards the campaign.
        goal_amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The overall goal for the campaign
        pledged_amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount pledged toward the campaign.
        total_fees:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: the total fees collected from donations associated with this
            campaign
      type: object
    CampaignUpdateRequest:
      description: The update request for a Campaign. No fields are editable if campaign
        in done state.
      properties:
        goal:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: Optional - Currency is not editable but is allowed on a request
            provided it matches. Editable in draft/scheduled/active state
      type: object
    CampaignsCreateRequest:
      description: CampaignRequest
      properties:
        goal:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The financial goal of the campaign.
      type: object
    CampaignsCreateResponse:
      description: CampaignCreateResponse
      properties:
        _links:
          $ref: '#/components/schemas/Links'
        goal:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The financial goal of the campaign.
      type: object
    Campus:
      description: The location of a building and/or an entity to which funds are
        made available. Funds associated with campuses are listed in order as set
        by the giving dashboard user.
      properties:
        _embedded:
          description: The embedded resources on a campus.
          properties:
            funds:
              description: A sorted array of funds that are available to the campus.
              items:
                properties:
                  id:
                    description: Unique identifier of the resource.
                    format: uuid
                    type: string
                type: object
              type: array
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              funds: payments.Fund
        id:
          description: The unique identifier for this campus.
          format: uuid
          type: string
        name:
          description: The name of the campus.
          type: string
        state:
          description: The state of this campus. Can be published or unpublished.
          enum:
          - published
          - unpublished
          type: string
      type: object
      x-public: true
    CardExpiration:
      description: |
        The year and month that the card expires. Omitted for banks.
      properties:
        month:
          example: 11
          type: integer
        year:
          example: 2023
          type: integer
      type: object
      x-public: true
    Collection:
      properties:
        _links:
          $ref: '#/components/schemas/CollectionLinks'
        count:
          description: The number of resources in the current page.
          type: integer
        total:
          description: The total number of available resources.
          type: integer
      type: object
      x-public: true
    Collection-Stats:
      description: only included when the Collection-Stats header param is sent
      properties:
        average_amount:
          properties:
            currency:
              description: Currency code such as USD or CAD. Note this is set to the
                same currency as the latest donation.
              type: string
            value:
              description: Average amount of money given, in cents.
              type: integer
          type: object
        earliest_donation:
          properties:
            amount:
              properties:
                currency:
                  description: Currency code such as USD or CAD.
                  type: string
                value:
                  description: Amount of donation, in cents.
                  type: integer
              type: object
            created_at:
              format: date-time
              type: string
          type: object
        latest_donation:
          properties:
            amount:
              properties:
                currency:
                  description: Currency code such as USD or CAD.
                  type: string
                value:
                  description: Amount of donation, in cents.
                  type: integer
              type: object
            created_at:
              format: date-time
              type: string
          type: object
        total_amount:
          properties:
            currency:
              description: Currency code such as USD or CAD. Note this is set to the
                same currency as the latest donation.
              type: string
            value:
              description: Total amount of money over all time given, in cents.
              type: integer
          type: object
        ytd_amount:
          properties:
            currency:
              description: Currency code such as USD or CAD. Note this is set to the
                same currency as the latest donation.
              type: string
            value:
              description: Total amount of money given year to date, in cents.
              type: integer
          type: object
      type: object
      x-public: true
    CollectionLinks:
      properties:
        first:
          properties:
            href:
              description: |
                A link to the first page of resources based on current page size
              format: url
              type: string
          type: object
        last:
          properties:
            href:
              description: |
                A link to the last page of resources based on current page size
              format: url
              type: string
          type: object
        next:
          properties:
            href:
              description: |
                A link to the next page of resources based on current page size
              format: url
              type: string
          type: object
        prev:
          properties:
            href:
              description: |
                A link to the previous page of resources based on current page size
              format: url
              type: string
          type: object
        self:
          properties:
            href:
              description: A link to the current page
              format: url
              type: string
          type: object
      readOnly: true
      type: object
      x-public: true
    CreatedSource:
      description: |
        Via what source was the resource created. When a source is not specified it will have the value `unknown`.<br/>
        <b>Note:</b> This field is not updatable!
      enum:
      - app
      - check_in
      - donations
      - event_registration
      - event_payment
      - fluro
      - forms
      - guest_giving
      - import
      - live_chat
      - live_syndication
      - messaging
      - people_dashboard
      - player
      - schedule
      - payment_form
      - unknown
      - workflows
      type: string
      x-public: true
    CustomFieldDefinition:
      description: |
        A CustomFieldDefinition is a resource that represents a custom field that can be attached to a Profile. The data in this resource is completely owned by the client/organization, and edits are allowed by admins of the org.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
        archived_at:
          description: Moment when the resource was archived.
          format: date-time
          readOnly: true
          type: string
        choices:
          description: |
            The choices available for the custom field. Only compatible with
            types `dropdown` and `checkbox`. The order of the choices in the
            array will be preserved when fetched, and each `name` must be
            unique.
          items:
            properties:
              id:
                description: The id of the choice.
                format: uuid
                type: string
              name:
                description: The name of the choice.
                type: string
            required:
            - id
            - name
            type: object
          type: array
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        name:
          description: The name of the custom field.
          type: string
        org_key:
          description: The identifier for the owning organization.
          pattern: /[A-Z0-9]{8}/
          type: string
        position:
          description: The position of the custom field in relation to others for
            the org.
          type: integer
        revision_id:
          description: |
            An opaque revision identifier that's server generated to track
            revisions to the field schema. This value will automatically change
            every time an update to the field schema is made. This value must be
            passed by clients when creating/updating a Field resource.
          type: string
        status:
          description: The status of the custom field.
          enum:
          - active
          - archived
          type: string
        type:
          $ref: '#/components/schemas/CustomFieldDefinitionType'
        updated_at:
          description: Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
        updated_by_user:
          $ref: '#/components/schemas/UpdatedByUser'
      required:
      - org_key
      - name
      - type
      type: object
      x-public: true
    CustomFieldDefinitionCreate:
      description: |
        Available fields used to create a CustomFieldDefinition.
      properties:
        type:
          $ref: '#/components/schemas/CustomFieldDefinitionType'
      required:
      - org_key
      - name
      - type
      type: object
    CustomFieldDefinitionType:
      description: The type of the custom field. New types may be added without being
        considered a breaking change.
      enum:
      - short_text
      - long_text
      - dropdown
      - checkbox
      - date
      type: string
      x-public: true
    CustomFieldDefinitionUpdate:
      description: |
        Available fields used to update a CustomFieldDefinition.
      properties:
        type:
          $ref: '#/components/schemas/CustomFieldDefinitionType'
      type: object
    CustomFieldValue:
      description: A value for a custom profile field, where the field is defined
        by a [CustomFieldDefinition](#tag/CustomFieldDefinition).
      properties:
        custom_field_definition:
          description: |
            The related custom field definition. See
            <#tag/CustomFieldDefinition>
          properties:
            id:
              description: The id for the custom field definition.
              format: uuid
              type: string
            name:
              description: The name of the custom field.
              type: string
            revision_id:
              description: The revision id for the custom field definition.
              format: uuid
              type: string
            type:
              $ref: '#/components/schemas/CustomFieldDefinitionType'
          required:
          - id
          type: object
        value:
          description: The value of the custom field.
          oneOf:
          - $ref: '#/components/schemas/CustomFieldValueText'
          - $ref: '#/components/schemas/CustomFieldValueChoice'
          - $ref: '#/components/schemas/CustomFieldValueChoices'
          - $ref: '#/components/schemas/CustomFieldValueDate'
          type: object
      required:
      - custom_field_definition
      - value
      type: object
      x-public: true
    CustomFieldValueChoice:
      description: A chosen value for a custom profile field.
      properties:
        choice:
          properties:
            id:
              description: The id of the choice.
              format: uuid
              type: string
            name:
              description: The name of the choice.
              type: string
          required:
          - id
          type: object
      type: object
      x-public: true
    CustomFieldValueChoiceInput:
      description: A value for a custom profile field that can be used when creating
        or updating a profile.
      properties:
        choice:
          properties:
            id:
              description: The id of the choice.
              format: uuid
              type: string
          required:
          - id
          type: object
      required:
      - choice
      type: object
      x-public: true
    CustomFieldValueChoices:
      description: A list of chosen values for a custom profile field.
      items:
        $ref: '#/components/schemas/CustomFieldValueChoice'
      type: array
      x-public: true
    CustomFieldValueChoicesInput:
      description: A list of values for a custom profile field that can be used when
        creating or updating a profile.
      items:
        $ref: '#/components/schemas/CustomFieldValueChoiceInput'
      type: array
      x-public: true
    CustomFieldValueDate:
      properties:
        date:
          description: The date value of the custom field.
          format: date
          type: string
      type: object
      x-public: true
    CustomFieldValueInput:
      description: A value for a custom profile field that can be used when creating
        or updating a profile.
      properties:
        custom_field_definition:
          description: |
            The related custom field definition. See
            <#tag/CustomFieldDefinition>
          properties:
            id:
              description: The id for the custom field definition.
              format: uuid
              type: string
            revision_id:
              description: |
                The revision id for the custom field definition. This value will
                automatically change every time an update to the custom field
                definition resource is made. This value must be passed by
                clients when creating/updating a Field resource.
              format: uuid
              type: string
          required:
          - id
          - revision_id
          type: object
        value:
          description: The value of the custom field.
          oneOf:
          - $ref: '#/components/schemas/CustomFieldValueText'
          - $ref: '#/components/schemas/CustomFieldValueChoiceInput'
          - $ref: '#/components/schemas/CustomFieldValueChoicesInput'
          - $ref: '#/components/schemas/CustomFieldValueDate'
          type: object
      required:
      - custom_field_definition
      - value
      type: object
      x-public: true
    CustomFieldValueText:
      properties:
        text:
          description: The text value of the custom field.
          type: string
      type: object
      x-public: true
    Designation:
      description: A single designation specifying how a portion of a donation is
        allocated to a fund and campus.
      properties:
        amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount of money that was designated to a fund and campus.
        campus:
          description: Campuses are a way for clients to organize their funds. A client
            can have 0 to many campuses. A campus can have 0 to many funds.
          format: uuid
          type: string
        fee:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount of money in fees for a donation designated to a
            fund and campus.
        fund:
          description: A fund is a way for clients to organize and group donations
            together. A fund (or sub-fund) can belong to a campus.
          format: uuid
          type: string
      required:
      - fund
      - amount
      type: object
      x-public: true
    DesignationResponse:
      properties:
        _embedded:
          properties:
            campus:
              allOf:
              - $ref: '#/components/schemas/Campus'
              - description: The campus for this designation.
            donation:
              allOf:
              - $ref: '#/components/schemas/DonationResponse'
              - description: The related parent donation.
            fund:
              allOf:
              - $ref: '#/components/schemas/Fund'
              - description: The fund for this designation.
            profile:
              allOf:
              - $ref: '#/components/schemas/Profile'
              - description: The related profile for this donation.
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              campus: _
              donation: Donation
              fund: Fund
        _links:
          $ref: '#/components/schemas/Links'
        amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount of money that was designated to a fund and campus.
        campus_id:
          description: The ID of the related campus, if set
          example: 69920afb-7a8c-7de4-906d-5340e76fa328
          format: uuid
          type: string
        fee:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount of money in fees for a donation designated to a
            fund and campus.
        fund_id:
          description: The ID of the related fund
          example: 69920afb-7a8c-7de4-906d-5340e76fa328
          format: uuid
          type: string
      type: object
      x-public: true
    Designations:
      description: A designation is a way for a user to specify that a percentage
        of their total gift will be directed towards a particular fund and campus.
      items:
        $ref: '#/components/schemas/Designation'
      type: array
      x-public: true
    Document:
      properties:
        id:
          description: Unique identifier of the document
          format: uuid
          type: string
          x-public: true
      type: object
    DonationHistory:
      description: |
        A donation history record represents a snapshot of changes made to a donation at a specific point in time.
        Each record tracks what changed, who initiated the change, and when it occurred. This provides a complete
        audit trail for all modifications to a donation throughout its lifecycle.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    DonationRequest:
      properties:
        designations:
          $ref: '#/components/schemas/Designations'
        instrument_description:
          $ref: '#/components/schemas/InstrumentDescription'
        instrument_type:
          $ref: '#/components/schemas/InstrumentType'
      required:
      - donor_covered_fees
      - terminal_id
      - designations
      - instrument_type
      type: object
      x-subsplash-sdk:
        fieldResourceTypes:
          instrument: payments.Instrument
    DonationResponse:
      properties:
        _embedded:
          properties:
            adjustments:
              description: A log of actions performed on this donation.
              items:
                $ref: '#/components/schemas/Adjustment'
              type: array
            batch:
              allOf:
              - $ref: '#/components/schemas/Batch'
              - description: The batch this donation belongs to.
            campuses:
              description: An array of campuses specified by the `designations` array.
              items:
                $ref: '#/components/schemas/Campus'
              type: array
            donation-schedule:
              description: The donation-schedule that produced this donation.
              properties:
                id:
                  description: The unique identifier for the donation-schedule.
                  example: ec194b59-9fe2-4a2e-8c1d-91d0c32f8e5c
                  format: uuid
                  type: string
              type: object
            funds:
              description: An array of Payment Funds specified by the `designations`
                array. Each fund may or may not have embedded its `parent-fund` or
                `sub-funds`.
              items:
                description: The fund this donation belongs to.
                properties:
                  _embedded:
                    properties:
                      parent-fund:
                        description: The parent of this particular fund.
                        properties:
                          id:
                            description: Unique identifier for the resource.
                            format: uuid
                            type: string
                          name:
                            description: The name of the fund.
                            type: string
                        type: object
                    type: object
                    x-subsplash-sdk:
                      fieldResourceTypes:
                        parent-fund: payments.Fund
                  id:
                    description: Unique identifier for the resource.
                    format: uuid
                    type: string
                  name:
                    description: The name of the fund.
                    type: string
                type: object
              type: array
            instrument:
              description: The payment method for the donation. See <https://api.docs.subsplash.net/payments/#tag/Instrument>.
              properties:
                id:
                  description: An instrument ID.
                  format: uuid
                  type: string
                last_four:
                  description: The last four digits of the instrument identification
                    number. This field will not appear for instruments with a type
                    of `cash`, `check`, or `other`.
                  example: "4242"
                  pattern: ^\d{4}$
                  type: string
                type:
                  description: An instrument type
                  example: visa
                  type: string
              type: object
            profile:
              description: The donor who gave the gift.
              properties:
                id:
                  description: The unique identifier for this profile.
                  example: ec194b59-9fe2-4a2e-8c1d-91d0c32f8e5c
                  format: uuid
                  type: string
              type: object
            recurring:
              description: The time trigger details that were used to make this a
                recurring donation.
              properties:
                id:
                  description: The unique identifier for this recurring detail.
                  example: ec194b59-9fe2-4a2e-8c1d-91d0c32f8e5c
                  format: uuid
                  type: string
              type: object
            transfer:
              allOf:
              - $ref: '#/components/schemas/Transfer'
              - description: The transfer details for this donation.
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              campuses: _
              funds: payments.Fund
              instrument: payments.Instrument
            forceCreateTypes:
              transfer: Transfer
        _links:
          $ref: '#/components/schemas/Links'
        auth_date:
          description: Date the donation was received for donation entries, or the
            moment an ACH or card transaction was authorized.
          format: date-time
          type: string
        check_number:
          description: Only used for check gifts.
          example: "4001"
          type: string
        created_at:
          description: Moment when the resource was created in UTC.
          format: date-time
          type: string
        designations:
          $ref: '#/components/schemas/Designations'
        donor_covered_fees:
          description: Whether or not the donor decided to cover the processing fees.
          type: boolean
        frequency:
          description: The frequency of the donation indicates if the donation came
            from a recurring gift or one time gift.
          enum:
          - one_time
          - recurring
          type: string
        has_adjustments:
          description: Whether or not this donation has been modified.
          example: true
          type: boolean
        id:
          description: The ID of the donation.
          example: 69920afb-7a8c-7de4-906d-5340e76fa328
          format: uuid
          type: string
        instrument_description:
          $ref: '#/components/schemas/InstrumentDescription'
        instrument_type:
          $ref: '#/components/schemas/InstrumentType'
        internal_notes:
          description: Notes left by the dashboard user.
          example: Check failed to clear
          type: string
        memo:
          description: An optional message from the user.
          example: Thank you!
          maxLength: 280
          type: string
        org_key:
          description: The identifier for the owning organization.
          example: BUSINESS
          format: /[A-Z0-9]{8}/
          readOnly: true
          type: string
        short_id:
          description: A more human friendly, short, unique, integer id for the Donation.
          example: 10
          minimum: 1
          type: integer
        status:
          description: |
            The current status or state of the donation.

            - `paid`: An online donation that has been successfully transferred to the client's bank account.
            - `batched`: An offline donation that has been batched successfully.
            - `transfer pending`: An online donation that has been processed and is waiting to be transferred to a client's bank account.
            - `pending`: A donation that is currently processing or awaiting capture.
            - `failed`: A donation that has failed.
            - `refunded`: A donation that has been refunded.
            - `partial refund`: A donation that has been partially refunded.
            - `disputed`: An online donation that has been disputed by the donor as possible fraud/theft.
            - `deleted`: A donation that has been deleted.
          enum:
          - paid
          - batched
          - transfer pending
          - pending
          - failed
          - refunded
          - partial refund
          - disputed
          - deleted
          example: pending
          type: string
        total_amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The sum of the amounts for all the designations associated
            with this donation.
        total_fee:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The sum of the fees for all the designations associated with
            this donation.
        updated_at:
          description: Moment when the resource was updated in UTC.
          format: date-time
          type: string
      type: object
      x-public: true
    DonationTerminal:
      description: A donation terminal defines the configuration settings that should
        be used for accepting donations.
      properties:
        _embedded:
          properties:
            campuses:
              description: |
                A sorted list of campuses associated with this terminal. Campuses also includes a sorted list of funds that are available to the campus.

                Campuses are only returned if the `short_code` filter is provided.
                Campuses without published funds are excluded.
              items:
                $ref: '#/components/schemas/Campus'
              type: array
            funds:
              description: |
                A sorted list of Payment Funds associated with this terminal.

                Funds are only returned if the `short_code` filter is provided.
              items:
                properties:
                  id:
                    description: Unique identifier for the resource.
                    format: uuid
                    type: string
                type: object
              type: array
            payment_account:
              description: The base Payment Account resource. This will only be included
                when using the short_code filter, and will NOT include the payment_account
                rates "tier" value, due to account privacy considerations.
              properties:
                currency:
                  description: The selected currency for the payfac for payouts. The
                    set of valid codes are defined in [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).
                  maxLength: 3
                  type: string
                rates:
                  description: |
                    The rates information defines the base and customized fee options for a given payment account. The base rates are based on which tier (standard/giving_only) a client is a part of. The rate fee values are either percentage based or flat and apply when the platform executes payments of different types, using different instruments, and the payments service takes a portion of the amount transferred. The payments service controls what are known as the "base" rates, which are applied to the majority of accounts, but in some circumstances we negotiate custom rates with specific clients which the payments service applies on a per-account basis.

                    For example, if both credit.flat_fee and card.flat_fee are defined, but debit.flat_fee is not, then a payment with a credit card will use the rate from credit.flat_fee, but a payment with a debit card will use the rate from card.flat_fee because it's a type of card and there's no option defined for debit.flat_fee.
                  properties:
                    base:
                      allOf:
                      - $ref: '#/components/schemas/Rates'
                      description: Our base rate values based on the value for the
                        current tier. These values are used by the front end code
                        when calculating the rates for donors-cover fees so that values
                        for the custom rate negotiations aren't made public.
                      readOnly: true
                  type: object
              type: object
            terminal:
              description: The base Payment Terminal resource.
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  type: string
              type: object
          required:
          - terminal
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              campuses: _
              funds: payments.Fund
              payment_account: payments.PaymentAccount
              terminal: payments.Terminal
        created_at:
          description: Moment when the resource was created in UTC.
          format: date-time
          type: string
        donor_address_required:
          default: false
          description: Whether the address of the donor is required when creating
            new donations.
          type: boolean
        donor_choose_fund_enabled:
          default: false
          description: Flag indicating if the donor has to choose a fund before giving.
          type: boolean
        donor_covered_fees_default_enabled:
          default: true
          description: Whether the option for a donor to cover processing fees is
            selected by default or not.
          type: boolean
        donor_covered_fees_enabled:
          default: true
          description: Whether to allow the donor to cover the cost of the fee for
            a given donation.
          type: boolean
        donor_memo_enabled:
          default: true
          description: Whether to allow donor's to attach a memo to a donation.
          type: boolean
        engiven_crypto_enabled:
          default: false
          description: Flag indicating if Engiven crypto donations are enabled for
            this terminal.
          type: boolean
        engiven_crypto_url:
          description: The Engiven crypto donation widget URL. Required when engiven_crypto_enabled
            is true.
          example: https://platform.engiven.com/give/123/widget/456
          format: url
          type: string
        engiven_stock_enabled:
          default: false
          description: Flag indicating if Engiven stock donations are enabled for
            this terminal.
          type: boolean
        engiven_stock_url:
          description: The Engiven stock donation widget URL. Required when engiven_stock_enabled
            is true.
          example: https://platform.engiven.com/give/123/widget/456
          format: url
          type: string
        guest_giving_enabled:
          default: false
          description: Flag indicating if the guest giving feature is enabled.
          type: boolean
        id:
          description: The unique identifier for this donation terminal.
          format: uuid
          type: string
        in_app_giving_enabled:
          default: false
          description: Flag indicating if the in-app giving feature is enabled.
          type: boolean
        org_key:
          description: The identifier for the owning organization.
          format: /[A-Z0-9]{8}/
          readOnly: true
          type: string
        short_code:
          description: Six character short code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        updated_at:
          description: Moment when the resource was most recently updated in UTC.
          format: date-time
          type: string
      required:
      - org_key
      - short_code
      type: object
      x-public: true
    DonationUpdateRequest:
      description: The update request for a donation.
      properties:
        designations:
          $ref: '#/components/schemas/Designations'
        instrument_description:
          $ref: '#/components/schemas/InstrumentDescription'
        instrument_type:
          $ref: '#/components/schemas/InstrumentType'
      type: object
    EndUser:
      description: |
        An EndUser is a representation of a person. An EndUser can represent both an online user who has authenticated through an Auth Provider OR an offline user that was created by a specific client to represent a person who interacts with their organization outside of the Subsplash ecosystem.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
        created_source:
          $ref: '#/components/schemas/CreatedSource'
        phone:
          $ref: '#/components/schemas/PhoneNumber'
        updated_by_user:
          $ref: '#/components/schemas/UpdatedByUser'
      type: object
    EndUserAuthData:
      description: EndUserAuthData has the credential details for the associated EndUser
        that are specific to the EndUser within the associated AuthProvider.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    Error:
      properties:
        errors:
          description: A list of errors.
          items:
            properties:
              code:
                description: An application-specific error code, expressed as a string
                  value.
                type: string
              detail:
                description: A human-readable explanation specific to this occurrence
                  of the problem.
                type: string
              id:
                description: A unique identifier for this particular occurrence of
                  the problem.
                type: string
              source:
                properties:
                  parameter:
                    description: A string indicating which URI query parameter caused
                      the error.
                    type: string
                  pointer:
                    description: A JSON Pointer [RFC6901] to the associated entity
                      in the request document.
                    type: string
                type: object
            type: object
          type: array
      type: object
      x-public: true
    ErrorResponse:
      properties:
        errors:
          items:
            properties:
              code:
                type: string
              message:
                type: string
              status:
                type: string
          type: array
      type: object
      x-public: true
    ErrorResponse_public:
      properties:
        errors:
          items:
            properties:
              code:
                type: string
              message:
                type: string
              status:
                type: string
          type: array
      type: object
      x-public: true
    ErrorResponsePublic:
      properties:
        errors:
          items:
            properties:
              code:
                type: string
              message:
                type: string
              status:
                type: string
          type: array
      type: object
      x-public: true
    Event:
      properties:
        _embedded:
          properties:
            calendar:
              $ref: '#/components/schemas/Calendar'
            calendars:
              items:
                $ref: '#/components/schemas/Calendar'
              type: array
            form:
              type: object
            images:
              items:
                properties:
                  id:
                    description: image associated with the repeating event
                    format: uuid
                    type: string
                type: object
              type: array
            location:
              properties:
                id:
                  description: Unique identifier of the Location
                  format: uuid
                  type: string
              type: object
            repeating-event:
              allOf:
              - $ref: '#/components/schemas/RepeatingEvent'
              description: |
                RepeatingEvent from which an event was generated.
            sessions:
              items:
                $ref: '#/components/schemas/Session'
              type: array
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              calendar: Calendar
              calendars: Calendar
              images: files.Image
              location: Location
              repeating-event: RepeatingEvent
              sessions: EventSession
        _links:
          $ref: '#/components/schemas/Link'
        additional_label:
          type: string
        all_day:
          default: false
          type: boolean
        app_key:
          example: ABDCDE
          type: string
        check_in_enabled:
          default: false
          description: |
            Indicates whether or not check-in is toggled on for this event.
            Client is responsible for checking that there are valid sessions.
          type: boolean
        created_at:
          description: Date time when the resource was created
          format: date-time
          readOnly: true
          type: string
        deleted_at:
          description: Date time when the resource was deleted, may be updated with
            proper roles
          format: date-time
          nullable: true
          type: string
        description:
          description: HTML or text description of the event.
          type: string
        description_text:
          description: Plain text description of the event.
          readOnly: true
          type: string
        domain:
          default: general
          description: Domain of the event inherited from the calendar.
          enum:
          - general
          - group
          readOnly: true
          type: string
        email:
          description: Email for the event.
          format: email
          type: string
        end_at:
          description: Datetime when the event ends
          format: date-time
          type: string
        fluro_data:
          additionalProperties: true
          description: Fluro-specific event data
          type: object
        fluro_event_id:
          description: The Fluro Event Object ID.
          format: oid
          type: string
        has_check_ins:
          default: false
          description: |
            Indicates whether or not this event has any check-ins. This field
            is updated via pubsub when a check-in is created. Not available via sdk.
          type: boolean
          x-subsplash-sdk:
            ignore: true
        ical_uid:
          description: |
            If the event corresponds to an iCal event, this field is the UID of
            the event as it was in the iCal feed.
          readOnly: true
          type: string
        id:
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
          format: uuid
          readOnly: true
          type: string
        manually_edited:
          description: A flag indicating if this event has been manually edited by
            a user.
          type: boolean
        original_occurrence_date:
          description: Datetime of occurrence as set by repetition rule
          format: date-time
          type: string
        phone:
          description: Phone number for the event.
          format: phone
          type: string
        published:
          default: false
          description: a flag indicating if the calendar has been published or not
          type: boolean
        published_at:
          description: Date time when the resource was published
          format: date-time
          type: string
        recurring:
          description: Indicates if an iCal event is recurring.
          readOnly: true
          type: boolean
        send_attendance_reminder:
          default: false
          type: boolean
        short_code:
          description: the 7 character/digit short code
          example: 82jvt2y
          pattern: ^\w{7}$
          type: string
        source:
          description: Indicates the source of the event.
          enum:
          - standard
          - ical
          - repeating
          readOnly: true
          type: string
        start_at:
          description: Datetime when the event starts
          format: date-time
          type: string
        status:
          default: draft
          description: Publishing status of event.
          enum:
          - draft
          - scheduled
          - published
          type: string
        subtitle:
          example: Return of the King
          type: string
        timezone:
          description: Valid IANA time zone string.
          example: America/Los_Angeles
          type: string
        title:
          example: The Lord of the Rings
          type: string
        updated_at:
          description: Date time when the resource was last updated
          format: date-time
          readOnly: true
          type: string
        url:
          description: Website URL for the event.
          format: url
          type: string
        url_title:
          description: Website URL button display title.
          type: string
        visibility:
          description: Visibility status of the event
          enum:
          - public
          - dashboard
          type: string
      required:
      - id
      - app_key
      - timezone
      - title
      type: object
      x-public: true
    ExportJob:
      description: |
        An ExportJob resource represents the process of compiling a list of profiles into a CSV file for clients to view their data.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    ExternalUser:
      description: |
        Describes a user external to the Subsplash system using a user id known by an external system (auth provider) and the id of the
        external auth provider. Note this object allows multiple external user ids as long as they are from the same auth provider.
      properties:
        auth_provider_id:
          description: Unique identifier of an auth provider
          format: uuid
          type: string
        user_ids:
          description: An array of External user ids recognized by an auth provider
          items:
            type: string
          type: array
      type: object
      x-public: true
    Form:
      description: The form resource is the foundational resource for building a form,
        and it contains the data required to display a form to an end user.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    FormResponse:
      description: The response resource contains the information collected by end
        users when submitting a form.
      properties:
        answers:
          description: An object containing the data collected for each field.
          items:
            properties:
              field_id:
                description: The unique id of the form field the answer refers to.
                type: string
              field_type:
                description: The field's type from the form.
                enum:
                - date
                - dropdown
                - email
                - file_upload
                - group
                - legal
                - long_text
                - multiple_choice
                - number
                - opinion_scale
                - payment
                - picture_choice
                - rating
                - short_text
                - statement
                - website
                - yes_no
                - phone_number
                type: string
              type:
                description: The answer field's data type.
                enum:
                - choice
                - choices
                - date
                - email
                - url
                - file_url
                - number
                - boolean
                - text
                type: string
              value:
                description: The string representation of the answer.
                type: string
            type: object
          type: array
        loaded_at:
          description: Time when the form was initially loaded by the end user.
          format: date-time
          type: string
      required:
      - answers
      - loaded_at
      type: object
      x-public: true
    Fund:
      description: A fund is a way for clients to organize and group donations together.
        A fund (or sub-fund) can belong to a campus.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      required:
      - name
      - id
      - org_key
      type: object
    FundCreateRequest:
      description: A request to create a fund.
      properties:
        name:
          type: string
        org_key:
          pattern: ^[A-Z0-9]{8}$
          type: string
      required:
      - name
      - org_key
      type: object
      x-public: true
    FundSummary:
      properties:
        grand_total:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The sum of all gifts
        offline_gift_total:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The sum of all gifts given offline
        online_gift_total:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The sum of all gifts given online
      required:
      - fund_name
      - fund_id
      - online_gift_total
      - offline_gift_total
      - online_count
      - offline_count
      type: object
    FundUpdateRequest:
      description: A request to update a fund.
      properties:
        state:
          enum:
          - archived
          - published
          - unpublished
          type: string
      type: object
      x-public: true
    GraduationYear:
      description: The year the user will graduate, or graduated, high school. Used
        to calculate academic_grade.
      type: integer
      x-public: true
    Group:
      description: A Group object represent a group of GroupMembers
      properties:
        _embedded:
          properties:
            calendar:
              description: The calendar associated with the group.
              items:
                $ref: '#/components/schemas/Calendar'
              type: object
            group-members:
              description: Group members to add when Group is created. *Only returned
                on CREATE.*
              items:
                $ref: '#/components/schemas/GroupMember'
              type: array
            image:
              properties:
                id:
                  description: image associated with the group.
                  format: uuid
                  type: string
              type: object
            location:
              description: The location associated with the group.
              items:
                $ref: '#/components/schemas/Location'
              type: object
            type:
              description: The group-type associated with the group.
              items:
                $ref: '#/components/schemas/GroupType'
              type: object
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              calendar: GroupCalendar
              group-members: GroupMember
              image: files.Image
              location: GroupLocation
              type: GroupType
        _links:
          $ref: '#/components/schemas/Links'
        app_key:
          description: Six character app code.
          pattern: /^\w{6}$/
          type: string
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        day_of_week:
          description: the day of the week that the group meets
          enum:
          - MO
          - TU
          - WE
          - TH
          - FR
          - SA
          - SU
          type: string
        description:
          description: a description of the group being represented
          type: string
        enrollment_type:
          description: the group enrollment type of new joiners
          enum:
          - open
          - closed
          - request_to_join
          type: string
        fluro_data:
          additionalProperties: true
          description: a hidden field used for additional fluro data included in this
            group
          type: object
        frequency:
          description: the frequency that the group meets
          enum:
          - daily
          - weekly
          - every_other_week
          - monthly
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
        member_count:
          description: number of member in a group
          type: integer
        member_limit:
          description: the maximum number of members allowed in the group
          type: integer
        name:
          description: the name of the group
          type: string
        org_key:
          description: Eight character org code.
          pattern: /^\w{8}$/
          type: string
        public:
          description: indicates if the group should be open to anyone to join (true)
            or only open to those invited (false)
          type: boolean
        restricted_invites:
          description: a closed group can be further restricted so that when the `restricted_invites`
            flag is set to true, only group managers can invite new members
          type: boolean
        team_id:
          description: the fluro team object id
          type: string
        time_of_day:
          description: the time of day that the group meets in 24 hour format (e.g.
            0900, 1300, 2200)
          type: integer
        timezone:
          description: the timezone in which a group meeting in valid IANA format.
          example: America/Los_Angeles
          type: string
        updated_at:
          description: Moment when the resource was updated.
          format: date-time
          readOnly: true
          type: string
      type: object
      x-public: true
    GroupMember:
      description: A GroupMember represents an individual member of a Group
      properties:
        _embedded:
          properties:
            end-user:
              description: The EndUser associated with this GroupMember
              type: object
            group:
              description: The Group to which the GroupMember belongs
              type: object
          type: object
        _links:
          $ref: '#/components/schemas/Links'
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        first_name:
          description: first_name from the profile associated with the end-user.
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
        last_name:
          description: last_name from the profile associated with the end-user.
          type: string
        messaging_status:
          description: the messaging status of a group member, invited by default,
            active once the group member has been successfully added to a group, banned
            is setup upon a ban action by a dashboard administrator, and the error
            status if something goes wrong adding the member to the chat channel.
          enum:
          - invited
          - active
          - banned
          - error
          type: string
        role:
          description: the role a particular GroupMember has been assigned.
          enum:
          - manager
          - member
          type: string
        updated_at:
          description: Moment when the resource was updated.
          format: date-time
          readOnly: true
          type: string
      type: object
      x-public: true
    GroupType:
      description: A GroupType represents a custom group type created by the user
      properties:
        _embedded:
          type: object
        _links:
          $ref: '#/components/schemas/Links'
        app_key:
          description: Six character app code.
          pattern: /^\w{6}$/
          type: string
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
        name:
          description: the custom name of a particular GroupType.
          type: string
        org_key:
          description: Eight character org code.
          pattern: /^\w{8}$/
          type: string
        updated_at:
          description: Moment when the resource was updated.
          format: date-time
          readOnly: true
          type: string
      required:
      - name
      type: object
      x-public: true
    Household:
      description: |
        The Household is a resource that represents an organization's view of a set of Profiles that represent a family. The data in this resource is completely owned by the client/organization, and edits are allowed by admins of the org.
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            address:
              allOf:
              - $ref: '#/components/schemas/Address'
              description: |
                The optional address for the Household.
            guest-profiles:
              description: |
                The profile resources that are associated to the household as guests <https://api-docs.subsplash.net/#tag/Profile>.
                Note that by default, the full profile resources aren't fetched, but only the id of the profiles are included.
              items:
                $ref: '#/components/schemas/ProfileResponse'
              type: array
            members:
              description: |
                The related profile resources. <https://api-docs.subsplash.net/#tag/Profile>.
                Note that by default, the full profile resources aren't fetched, but only the
                id of the profiles are included.
              items:
                $ref: '#/components/schemas/ProfileResponse'
              type: array
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              address: locations.Address
              guest-profiles: Profile
              members: Profile
        _links:
          $ref: '#/components/schemas/Links'
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        deleted:
          default: false
          type: boolean
        external_id:
          description: A free form string field that allows for clients to reference
            a household in any arbitrary external system by that system's unique identifier.
            This field cannot be edited by the client and is unique among non-deleted
            households within an Org.
          maxLength: 255
          type: string
        family_id:
          description: The fluro family object id.
          type: string
        fluro_data:
          additionalProperties: true
          description: a hidden field used for additional fluro data included in this
            group
          type: object
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        name:
          description: The first name of the household.
          maxLength: 100
          type: string
        org_key:
          description: The identifier for the owning organization.
          format: /[A-Z0-9]{8}/
          type: string
        primary_email:
          description: The primary email address of the household.
          format: email
          maxLength: 256
          type: string
        primary_phone:
          $ref: '#/components/schemas/PhoneNumber'
        status:
          $ref: '#/components/schemas/HouseholdStatus'
        updated_at:
          description: Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
      required:
      - org_key
      - name
      type: object
      x-public: true
    HouseholdRelationship:
      description: |
        A Household Relationship is a resource that represents a relationship between a Profile and a Household. A profile cannot be both a member of a household and have a Household Relationship to the same household.

        A Household Relationship can be any of the following types:
        - __Guest__: a Profile that is not a member of the household, but can be checked in to an event by a member of the household.
        - __Trusted Person__: a Profile that is not a member of the household, but is allowed to check in any member of the household to an event. Trusted people have permissions to read the household resource data, including members data. Trusted people cannot modify household data nor can they modify profile data of members within households they are associated with.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    HouseholdRole:
      description: |
        Indicates what role the profile plays in the household, if any.
        - guardian = The profile is a guardian the household.
        - parent = The profile is a parent in the household.
        - child = The profile is a child in the household.
        - other = The profile is not a parent or child.
        - unknown = The profile's household role is unknown or cannot be mapped to a supported role.
      enum:
      - guardian
      - parent
      - child
      - other
      - unknown
      type: string
      x-public: true
    HouseholdStatus:
      default: active
      description: |
        The household's current status.
        - active = Household is actively being used.
        - archived = Household is not yet deleted so it is still accessible by users when specifically requested.
        - draft = Household is hidden
      enum:
      - active
      - archived
      - draft
      type: string
      x-public: true
    Image:
      properties:
        id:
          description: Unique identifier of app object
          format: uuid
          type: string
          x-public: true
      type: object
    Instrument:
      description: |
        A Payment Instrument models an external money account to transfer funds to and from. This can be a Credit Card, Debit Card, bank account for ACH payments, which can be owned by (linked/related to) an end user or an organization. An instrument must be related to either a Payment User or an Account (having both is an option in the future, but not supported).
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            end-user:
              allOf:
              - $ref: '#/components/schemas/EndUser'
              description: The End User that owns this Instrument.
            payment-account:
              description: |
                When an instrument is linked to an organization's account, this allows for payouts to that instrument. Only the bank account type is supported. An organization can have multiple accounts, and transfer funds to the same bank account.
              items:
                $ref: '#/components/schemas/PaymentAccount'
              type: object
            payment-user:
              allOf:
              - $ref: '#/components/schemas/PaymentUser'
              description: The Payment User that owns this Instrument. See <https://api-docs.subsplash.net/payments/#tag/PaymentUser>
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              accounts: PaymentAccount
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        default:
          description: If this is the End User's default Payment Instrument for this
            particular Payment Account.
          type: boolean
        disabled:
          default: false
          description: |
            The instrument is disabled and cannot be used for payments in any way. This is used to stop suspected fraud during an investigation.
          type: boolean
        exp:
          description: The year and month that the card expires. Omitted for banks.
          example:
            month: 1
            year: 2038
          items:
            $ref: '#/components/schemas/CardExpiration'
          type: object
        expiration:
          deprecated: true
          description: Use exp instead. The date that the instrument expires. Only
            applies to debit/credit cards.
          format: date
          type: string
        external_id:
          description: The external id of the instrument.
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        institution_name:
          description: The name of the institution that backs the instrument.
          maxLength: 50
          type: string
        last_four:
          description: The last four digits of the instrument identification number.
          pattern: ^\d{4}$
          readOnly: true
          type: string
        name_on_account:
          description: The name on the account to id the account.
          maxLength: 50
          readOnly: true
          type: string
        one_time:
          description: True if this instrument should be for one time use only. This
            should only be written during create calls.
          type: boolean
        org_key:
          description: The identifier for the owning organization.
          format: /[A-Z0-9]{8}/
          readOnly: true
          type: string
        postal_code:
          description: The billing postal code for this instrument.
          example: "90210"
          type: string
        type:
          description: A type field to indicate what kind of instrument this is.
          enum:
          - ACH
          - Visa
          - American Express
          - MasterCard
          - Discover
          - JCB
          - Diners Club
          - Card
          - Check
          - Cash
          - Other
          - DAF
          - QCD
          - Cash equivalent
          - In kind
          - Other Non-Trad
          type: string
        updated_at:
          description: Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
        verification:
          description: Either two micro-deposit amounts or a descriptor code to verify
            ownership of this instrument.
          example:
            amounts:
            - 32
            - 45
            descriptor_code: SM11AA
            type: descriptor_code
          items:
            $ref: '#/components/schemas/InstrumentVerification'
          type: object
      type: object
      x-public: true
    InstrumentDescription:
      description: Optional details about the payment method (instrument_type) used.
        Example for Cash equivalent might be `30 shares of Apple stock`
      type: string
      x-public: true
    InstrumentType:
      description: The type of payment instrument (e.g., Cash, Check, Other, etc.).
      enum:
      - Cash
      - Check
      - Other
      - ACH
      - Visa
      - American Express
      - MasterCard
      - Discover
      - JCB
      - Diners Club
      - DAF
      - QCD
      - Cash equivalent
      - In kind
      - Other Non-Trad
      example: Check
      type: string
      x-public: true
    InstrumentVerification:
      description: |
        Instrument verification is either two micro deposits or a descriptor code to verify ownership of an instrument
        by an end-user. When reading an instrument that needs verification, a type field will be present containing
        either 'amounts' or 'descriptor_code' to inform the caller how to
        verify.
      properties:
        amounts:
          items:
            example: 42
            maxLength: 2
            maximum: 99
            minLength: 2
            minimum: 1
            type: integer
          type: array
          writeOnly: true
        descriptor_code:
          example: SM11AA
          type: string
          writeOnly: true
        type:
          enum:
          - amounts
          - descriptor_code
          example: descriptor_code
          readOnly: true
          type: string
      type: object
      x-public: true
    JSONWebKey:
      description: A JSON data structure that represents a cryptographic key.
      properties:
        alg:
          description: Algorithm parameter - identifies the algorithm intended for
            use with the key.
          type: string
        e:
          description: The exponent value for an RSA public key. It is represented
            as a Base64urlUInt-encoded value.
          type: string
        kid:
          description: Unique identifier of this JSONWebKey within a JSONWebKeySet
          type: string
        kty:
          description: Key Type parameter - identifies the cryptographic algorithm
            family used with the key.
          type: string
        "n":
          description: The modulus value for an RSA public key. It is represented
            as a Base64urlUInt-encoded value.
          type: string
        use:
          description: Public Key Use parameter - identifies the intended use of the
            public key.
          type: string
      readOnly: true
      type: object
      x-public: true
    JoinRequest:
      description: A JoinRequest represents the request properties to join a Group.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    LatestMembershipStatusChange:
      description: |
        A LatestMembershipStatusChange is a resource that represents the most recent Membership Status Change for a given Profile.
      properties:
        effective_on:
          description: The date the membership status change took place.
          format: date
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
        status:
          description: The name of the membership status to which the profile was
            changed. `null` means the status is unknown.
          enum:
          - visitor
          - newcomer
          - regular_attender
          - member
          - former_attender
          nullable: true
          type: string
      type: object
      x-public: true
    Link:
      description: A Link is a library item that represents a link to some external
        content.
      properties:
        app_key:
          description: ID of App that owns the resource.
          pattern: ^[A-Z0-9]{6}$
          type: string
          x-public: true
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
          x-public: true
        deleted_at:
          deprecated: true
          description: Moment when the resource was deleted.
          format: date-time
          type: string
          x-public: true
        destination_url:
          description: URL that the link points to.
          maxLength: 1024
          type: string
          x-public: true
        has_tap:
          default: false
          description: Whether the link has tap functionality enabled.
          type: boolean
          x-public: true
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
          x-public: true
        published_at:
          description: Moment when the resource was or will be published.
          format: date-time
          readOnly: true
          type: string
          x-public: true
        short_code:
          description: Short unique identifier.
          pattern: ^[a-z0-9]{7}$
          type: string
          x-public: true
        snappages_page_id:
          description: The ID of a snappages page the link is related to.
          type: string
          x-public: true
        status:
          default: published
          description: Publishing status of resource.
          enum:
          - draft
          - scheduled
          - published
          readOnly: true
          type: string
          x-public: true
        subtitle:
          description: Link subtitle.
          maxLength: 255
          type: string
          x-public: true
        title:
          description: Link title.
          maxLength: 255
          type: string
          x-public: true
        type:
          default: external_browser
          description: Type of the link that determines how it is opened.
          enum:
          - internal_browser
          - external_browser
          - donation
          - subsplash_giving
          - video
          - contact
          - snappages_page
          type: string
          x-public: true
        updated_at:
          description: Moment when the resource was last changed.
          format: date-time
          readOnly: true
          type: string
          x-public: true
      required:
      - app_key
      type: object
    LinkEmbedded:
      properties:
        document:
          $ref: '#/components/schemas/Document'
        images:
          items:
            $ref: '#/components/schemas/Image'
          type: array
      type: object
      x-public: true
    LinkPublic:
      properties:
        href:
          format: url
          type: string
        templated:
          type: boolean
      type: object
      x-public: true
    Links:
      properties:
        self:
          properties:
            href:
              description: A link to the current resource
              format: url
              type: string
          type: object
      readOnly: true
      type: object
      x-public: true
    LinksPublic:
      properties:
        first:
          $ref: '#/components/schemas/LinkPublic'
        last:
          $ref: '#/components/schemas/LinkPublic'
        next:
          $ref: '#/components/schemas/LinkPublic'
        prev:
          $ref: '#/components/schemas/LinkPublic'
        related:
          $ref: '#/components/schemas/LinkPublic'
        self:
          $ref: '#/components/schemas/LinkPublic'
      type: object
      x-public: true
    ListBase:
      description: A resource to represent a list of non-homogeneous library items.
      properties:
        app_key:
          description: Six character app code.
          type: string
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        generated:
          description: |
            Indicates that the list was created by the system. This is done in certain situations, like when the content source of a [Web App](web_app.md) is based on filter and sort settings. Generated lists don't appear as library items; they are only used behind the scenes. Only used for dynamic lists. Defaults to `false`.
          type: boolean
        id:
          format: uuid
          readOnly: true
          type: string
        include_seriesless_media_items:
          description: Indicates if the list will include seriesless media items in
            it's contents.
          type: boolean
        list_rows_count:
          description: |
            The number of list rows in the list, both published and unpublished. Only set for standard lists.
          readOnly: true
          type: integer
        max_item_count:
          description: Maximum number of items to pull into a list.
          maximum: 200
          minimum: 1
          type: integer
        published_at:
          description: Moment when the resource was or will be published.
          format: date-time
          type: string
        short_code:
          description: Random string that uniquely identifies the resource.
          type: string
        sort_type:
          description: |
            Item sort method. Always `null` for standard lists. Allowed values:
              * `newest`: Most-recent to least-recent `created_at` values [default]
              * `oldest`: Least-recent to most-recent `created_at` values
              * `alphabetical`
              * `reverse_alphabetical`
              * `newest_date`: Most-recent to least-recent `date` values.
              * `oldest_date`: Least-recent to most-recent `date` values
              * `position` [**DEPRECATED**, not available for new lists or when updating list]
            `newest_date` and `oldest_date` are only relevant for dynamic lists of Media Items. For lists of other types they behave the same as `newest` and `oldest`, respectively.
          enum:
          - newest
          - oldest
          - alphabetical
          - reverse_alphabetical
          - newest_date
          - oldest_date
          - position
          type: string
        status:
          description: Publishing status of item. Draft is the default.
          enum:
          - draft
          - scheduled
          - published
          type: string
        subtitle:
          description: Subtitle of the resource. Maximum length is 100 characters.
          type: string
        title:
          description: Title of the resource. Maximum length is 100 characters.
          type: string
        type:
          description: Type states how items are added to the list.
          enum:
          - standard
          - dynamic
          readOnly: true
          type: string
        updated_at:
          description: Moment when the resource was updated.
          format: date-time
          readOnly: true
          type: string
      required:
      - id
      - app_key
      type: object
      x-public: true
    ListCreateReq:
      description: A resource to represent a list of non-homogeneous library items.
      oneOf:
      - $ref: '#/components/schemas/ListBase'
      properties:
        id:
          format: uuid
          type: string
        type:
          description: Type states how items are added to the list.
          enum:
          - standard
          - dynamic
          type: string
      required:
      - type
      type: object
      x-public: true
    ListRes:
      allOf:
      - $ref: '#/components/schemas/ListBase'
      - properties:
          type:
            description: Type states how items are added to the list.
            enum:
            - standard
            - dynamic
            readOnly: true
            type: string
        type: object
      x-public: true
    ListRow:
      properties:
        _embedded:
          description: |
            With 'Create a ListRow' and 'Update a ListRow' endpoints, only one of the resource types below is required if creating or updated a ListRow where type=static.
            With 'List ListRows' and 'Get One ListRow' endpoints, only one of the resource types below will be present in the response (describing the content of the ListRow)
          properties:
            album:
              $ref: '#/components/schemas/Album'
            calendar:
              $ref: '#/components/schemas/Calendar'
            event:
              $ref: '#/components/schemas/Event'
            link:
              $ref: '#/components/schemas/Link'
            list:
              $ref: '#/components/schemas/ListRes'
            live-media-item:
              $ref: '#/components/schemas/MediaItem'
            media-item:
              $ref: '#/components/schemas/MediaItem'
            media-series:
              $ref: '#/components/schemas/MediaSeries'
            mobile-tab-row-context:
              $ref: '#/components/schemas/MobileTabRowContext'
            rss:
              $ref: '#/components/schemas/Rss'
            song:
              $ref: '#/components/schemas/Song'
            source-list:
              $ref: '#/components/schemas/ListRes'
          required:
          - source-list
          type: object
          x-subsplash-sdk:
            forceCreateTypes:
              mobile-tab-row-context: MobileTabRowContext
        app_key:
          description: Six character app code.
          type: string
        created_at:
          description: Moment when the resource was created.
          format: date-time
          type: string
        deleted_at:
          description: Moment when the resource was deleted.
          format: date-time
          type: string
        id:
          format: uuid
          readOnly: true
          type: string
        list_row_context:
          $ref: '#/components/schemas/ListRowContext'
        method:
          description: |
            Method by which to get the item for this list row Allowed values:
              * `static`: gets the item with the id and type set in the embedded resource [default]
              * `most_recent`: gets the most recent item of the type defined name in type
              * `second_most_recent`: gets the second most recent item of the type defined name in type
          enum:
          - static
          - most_recent
          - second_most_recent
          type: string
        position:
          description: The row's position in the list.
          type: integer
        type:
          description: |
            Resource Type (plural name).
          enum:
          - lists
          - media-items
          - media-series
          - songs
          - albums
          - events
          - calendars
          - links
          - rss
          type: string
        updated_at:
          description: Moment when the resource was updated.
          format: date-time
          type: string
      required:
      - type
      type: object
      x-public: true
    ListRowContext:
      properties:
        resource_id:
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
          format: uuid
          type: string
        type:
          enum:
          - list
          - media-series
          type: string
      required:
      - resource_id
      - type
      type: object
      x-public: true
    LiveEventStream:
      properties:
        _links:
          $ref: '#/components/schemas/Link'
      required:
      - id
      type: object
    Location:
      description: The location at which a Group meets.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    LocationEmbedded:
      description: Embedded properties of location.
      properties:
        address:
          $ref: '#/components/schemas/Address'
        app:
          $ref: '#/components/schemas/App'
      type: object
      x-public: true
    LocationPublic:
      properties:
        _embedded:
          $ref: '#/components/schemas/LocationEmbedded'
        app_key:
          description: Six character app code
          pattern: ^[A-Z0-9]{6}$
          type: string
        created_at:
          description: Moment when the location was created
          format: date-time
          type: string
        deleted_at:
          description: Moment when the location was deleted
          format: date-time
          type: string
        email:
          description: The email of the location
          type: string
        id:
          description: Unique identifier of location object
          format: uuid
          type: string
        phone:
          description: The phone number of the location
          type: string
        subtitle:
          description: The subtitle of the location
          type: string
        title:
          description: The title of the location
          type: string
        type:
          $ref: '#/components/schemas/TypeBitSet'
        updated_at:
          description: Moment when the location was updated
          format: date-time
          type: string
        website_url:
          description: The url of the website
          type: string
      type: object
      x-public: true
    MICR:
      description: |
        The MICR is a check hash record
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            profiles:
              items:
                $ref: '#/components/schemas/Profile'
              type: array
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              profiles: Profile
        _links:
          $ref: '#/components/schemas/Links'
        id:
          description: MICR id
          readOnly: true
          type: string
        micr_hash:
          description: MICR hash
          readOnly: true
          type: string
      type: object
      x-public: true
    MediaItem:
      description: |
        A Media Item is the basic resource used to combine video, audio, a document,
        and metadata into one unit. Each one usually corresponds to a client's
        sermon. Each media item may be associated with a Media Series.
      properties:
        _embedded:
          properties:
            audio:
              type: object
            auto-publish-user:
              type: object
            broadcast:
              description: The linked Broadcast resource. When creating a new MediaItem,
                you can include the Broadcast resource to be created as well. When
                updating a MediaItem, you can include the Broadcast resource to be
                updated, but cannot create a new Broadcast or delete a Broadcast.
              properties:
                end_at:
                  description: The time when the broadcast is specified to end at
                    in UTC.
                  format: date-time
                  type: string
                start_at:
                  description: The time when the broadcast is specified to start at
                    in UTC.
                  format: date-time
                  type: string
                vod_m3u8_url:
                  description: The url of the HLS asset's m3u8 manifest if created
                    (this is about 3 minutes after the broadcast has stopped). Otherwise
                    this field is omitted.
                  readOnly: true
                  type: string
              type: object
            created-by-user:
              description: The user who created the resource.
              properties:
                id:
                  format: uuid
                  type: string
              type: object
            document:
              type: object
            images:
              items:
                type: object
              maxItems: 3
              type: array
            live-template:
              description: |
                The linked LiveTemplate resource. When creating a media item, it's possible to pass a LiveTemplate ID to reference the LiveTemplate
                that was used to create this media item.
                See <https://api.docs.subsplash.net/live/#tag/LiveTemplate>
              properties:
                id:
                  description: The unique identifier of the resource
                  format: uuid
                  type: string
              type: object
            media-series:
              $ref: '#/components/schemas/MediaSeries'
            notification:
              description: Integrated push notification for live stream.
              type: object
            player-prompts:
              items:
                $ref: '#/components/schemas/PlayerPrompt'
              type: array
            restriction:
              properties:
                _links:
                  $ref: '#/components/schemas/Links'
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  type: string
                rules:
                  items:
                    description: A single restriction rule that can be applied to
                      a media-item.
                    properties:
                      access:
                        type: string
                      type:
                        type: string
                    type: object
                  type: array
              type: object
            video:
              type: object
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              auto-publish-user: User
              created-by-user: User
              notification: Notification
            forceCreateTypes:
              restriction: Restriction
        _links:
          properties:
            dashboard:
              properties:
                href:
                  description: Dashboard link for the current resource
                  format: url
                  type: string
              type: object
            embed:
              properties:
                href:
                  description: Embed link for the current resource
                  format: url
                  type: string
              type: object
            self:
              properties:
                href:
                  description: A link to the current resource
                  format: url
                  type: string
              type: object
            share:
              properties:
                href:
                  description: Share link for the current resource
                  format: url
                  type: string
              type: object
          readOnly: true
          type: object
          x-public: true
        additional_label:
          description: Another text field.
          maxLength: 800
          type: string
        app_key:
          description: Six character app code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        auto_publish:
          description: |
            Indicates to automatically publish the media item when the transcoding
            jobs for its audio and/or video are complete.
          type: boolean
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        date:
          description: Arbitrary date to associate with the media item.
          format: date-time
          type: string
        deleted_at:
          description: Moment when the resource was deleted.
          format: date-time
          readOnly: true
          type: string
        external_audio_url:
          description: URL to an audio file.
          maxLength: 1024
          type: string
        external_id:
          description: Unique identifier from a third-party source. Not populated
            in most media-items, but may have custom uses in certain apps.
          pattern: ^[a-z0-9]{100}$
          type: string
        external_m3u8_url:
          description: URL to a m3u8 playlist file.
          maxLength: 1024
          type: string
        external_video_url:
          description: URL to a video file.
          maxLength: 1024
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
        legacy_id:
          description: Legacy identifier for the resource. Required by Podcasts.
          readOnly: true
          type: integer
        outline_button_title:
          description: Title of the first button.
          maxLength: 200
          type: string
        outline_button_url:
          description: Destination URL for the first button.
          maxLength: 200
          type: string
        podcast_guid:
          description: A unique identifier for a media item used in a podcast feed.
          maxLength: 100
          type: string
        position:
          description: Location in Media Series item list, or `null` if draft.
          minimum: 0
          nullable: true
          type: integer
        published_at:
          description: Moment when the item was or will be published.
          format: date-time
          type: string
        scriptures:
          description: Array of scripture references
          example:
          - John.3.14-John.3.16
          - Matthew.1.1
          items:
            type: string
          type: array
        short_code:
          description: Short unique identifier. Can only be provided on media item
            creation. If omitted, it will be auto-generated.
          pattern: ^[a-z0-9]{7}$
          type: string
        slug:
          description: Slug of the media item for use in URLs
          maxLength: 100
          pattern: ^[a-z0-9-]{1,100}$
          type: string
        speaker:
          description: Another text field.
          maxLength: 200
          type: string
        status:
          default: draft
          description: Publishing status of item.
          enum:
          - draft
          - scheduled
          - published
          type: string
        subtitle:
          description: Media item subtitle.
          maxLength: 100
          type: string
        summary:
          description: Long-form text description of the media item. May include hyperlinks,
            paragraphs, and line breaks formatted as HTML.
          type: string
        summary_text:
          description: Text description of the media item, based on summary, with
            HTML removed.
          readOnly: true
          type: string
        tags:
          description: |
            Array of tags of the form `{type}:{title}`. See the Tag.type
            documentation for supported types.
          example:
          - topic:Faith and Works
          - speaker:John Smith
          items:
            type: string
          type: array
        title:
          description: Title of the media item.
          maxLength: 100
          type: string
        updated_at:
          description: Moment when the resource was last changed.
          format: date-time
          readOnly: true
          type: string
        uses_live_vod:
          default: true
          description: Indicates if the livestream's VOD has been removed.
          type: boolean
        web_video_button_title:
          description: Title of the second button.
          maxLength: 200
          type: string
        web_video_button_url:
          description: Destination URL for the second button.
          maxLength: 1024
          type: string
        website_button_title:
          description: Title of the third button.
          maxLength: 1024
          type: string
        website_button_url:
          description: Destination URL for the third button.
          maxLength: 1024
          type: string
      type: object
      x-public: true
    MediaSeries:
      description: The Media Series type is used to contain a collection of Media
        Items.
      properties:
        _embedded:
          properties:
            images:
              items:
                type: object
              type: array
            media-series-end-user-access-roles:
              items:
                $ref: '#/components/schemas/MediaSeriesEndUserAccessRole'
              type: array
          type: object
        _links:
          properties:
            media-items:
              properties:
                href:
                  description: A link to media-items belonging to the media series
                  format: url
                  type: string
              type: object
            self:
              properties:
                href:
                  description: A link to the current resource
                  format: url
                  type: string
              type: object
          readOnly: true
          type: object
          x-public: true
        app_key:
          description: Six character app code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        deleted_at:
          description: Moment when the resource was deleted.
          format: date-time
          readOnly: true
          type: string
        display_type:
          default: thumbnails
          description: Method for displaying Media Items in series list.
          enum:
          - thumbnails
          - part numbers
          - dates
          - title only
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
        is_default:
          default: false
          deprecated: true
          description: Always `false`.
          type: boolean
        legacy_series_list_id:
          description: Supports legacy method of grouping series.
          type: integer
        media_items_count:
          description: Number of media items in the media series.
          readOnly: true
          type: integer
        position:
          description: |
            Position where media series should appear in a manually-reordered
            Smart List. If we manage to get rid of manually-oredered smart lists,
            this can be deprecated.
          type: integer
        published_at:
          description: Moment when the resource was or will be published.
          format: date-time
          type: string
        published_media_items_count:
          description: Number of published media items in the media series.
          readOnly: true
          type: integer
        short_code:
          description: Short unique identifier.
          pattern: ^[a-z0-9]{7}$
          readOnly: true
          type: string
        slug:
          description: Slug of the media series for use in URLs
          maxLength: 100
          pattern: ^[a-z0-9-]{1,100}$
          type: string
        status:
          default: draft
          description: Publishing status of series.
          enum:
          - draft
          - scheduled
          - published
          type: string
        subtitle:
          maxLength: 300
          type: string
        summary:
          description: Long-form text description of the media item. May include hyperlinks,
            paragraphs, and line breaks formatted as HTML.
          type: string
        summary_text:
          description: Text description of the media item, based on summary, with
            HTML removed.
          readOnly: true
          type: string
        title:
          maxLength: 150
          type: string
        updated_at:
          description: Moment when the resource was last changed.
          format: date-time
          readOnly: true
          type: string
      type: object
      x-public: true
    MediaSeriesEndUserAccessRole:
      description: The MediaSeriesEndUserAccessRole is used to link an EndUserAccessRole
        to a MediaSeries resource.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    MembershipStatusChange:
      description: |
        A Membership Status Change is a resource that represents a point in time when a membership status changed for a given profile. It also includes metadata around any changes in membership status like when the change was effective.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      required:
      - org_key
      - effective_on
      type: object
    Money:
      description: An object representing a monetary value with a value and currency
        units.
      properties:
        currency:
          description: Three-letter ISO currency code representing the units for the
            money. Must be a supported currency for the payment account. (https://www.iso.org/iso-4217-currency-codes.html)
          example: USD
          type: string
        value:
          description: A positive integer in the smallest currency unit (that is,
            100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency)
            representing the magnitude of money.
          example: 500
          type: integer
      type: object
      x-public: true
    Notification:
      description: Notification is a representation of a push notification.
      properties:
        _embedded:
          $ref: '#/components/schemas/NotificationEmbedded'
        _links:
          $ref: '#/components/schemas/SelfLinkPublic'
        additional_description:
          description: Text that is displayed in the notification detail view in the
            app.
          type: string
        app_key:
          description: Six character app code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        body:
          description: Text that is displayed in the notification on the lock screen,
            Notification Center, and inbox in the app.
          type: string
        created_at:
          description: Moment when the notification was created.
          format: date-time
          type: string
        deleted_at:
          description: Moment when the notification was deleted.
          format: date-time
          type: string
        displayed_count:
          description: Number of devices that displayed this notification.
          type: integer
        id:
          description: Unique identifier of notification object.
          format: uuid
          type: string
        is_live_stream_integrated:
          description: Whether the notification is integrated into a live stream.
          type: boolean
        minutes_before_published:
          description: Represents how many minutes before a livestream starts should
            the notification be sent.
          type: integer
        opened_count:
          description: Number of devices that opened this notification.
          type: integer
        pending_at:
          description: Moment when notification was marked as pending by the push
            agent.
          format: date-time
          type: string
        published_at:
          description: Moment when notification will be sent by the push agent.
          format: date-time
          type: string
        received_count:
          description: Number of devices that received this notification.
          type: integer
        send_err_msg:
          description: The error that occurred when sending the notification
          type: string
        sent:
          description: Represents whether a message has been sent.
          type: boolean
        sent_at:
          description: Moment when notification was sent as recorded by the push agent.
          format: date-time
          type: string
        sent_count:
          description: Number of devices this notification was sent to.
          type: integer
        sns_message_ids:
          description: |
            Unique identifiers assigned to the published message in SNS.
          items:
            type: string
          type: array
        status:
          description: Computed property based on the notifications `published_at`,
            `pending_at`, `sent_at`, and `deleted_at` properties.
          enum:
          - scheduled
          - draft
          - deleted
          - cancelled
          - pending
          - sent
          - to_send
          readOnly: true
          type: string
        subtitle:
          description: Subtitle of a notification.
          type: string
        title:
          description: Title of a notification that is displayed and bolded at the
            top of the notification on the lock screen and in the Notification Center.
          type: string
        type:
          description: The Notification type for any special handling of the notification
            when sending, when unspecified a notification is handled normally.
          enum:
          - volunteer_request
          - check_in_label
          - group_attendance
          type: string
        updated_at:
          description: Moment when the notification was updated.
          format: date-time
          type: string
      type: object
      x-public: true
    NotificationEmbedded:
      description: Embedded properties of the notification. Note when sending a notification
        to an `external-user`, `topic` is not allowed.
      properties:
        attachments:
          items:
            $ref: '#/components/schemas/Attachment'
          type: array
          x-public: true
        external-user:
          allOf:
          - x-public: true
          - $ref: '#/components/schemas/ExternalUser'
        topics:
          items:
            $ref: '#/components/schemas/Topic'
          type: array
          x-public: true
      type: object
      x-subsplash-sdk:
        fieldResourceTypes:
          end-users: EndUser
        forceCreateTypes:
          attachments: Attachment
    PagesLink:
      properties:
        _embedded:
          $ref: '#/components/schemas/LinkEmbedded'
        _links:
          $ref: '#/components/schemas/SelfLinkPublic'
        app_key:
          description: Six character app code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        created_at:
          description: Moment when the pages link was created
          format: date-time
          type: string
        deleted_at:
          description: Moment when the pages link was deleted
          format: date-time
          type: string
        destination_url:
          description: The destination url of the pages link
          type: string
        id:
          description: Unique identifier of pages link object
          format: uuid
          type: string
        published_at:
          description: The date and time the pages link was published
          format: date-time
          type: string
        short_code:
          description: Short unique identifier of the pages link
          pattern: ^[a-z0-9]{7}$
          readOnly: true
          type: string
        status:
          description: The status of the pages link
          type: string
        subtitle:
          description: The subtitle of the pages link
          type: string
        title:
          description: The title of the pages link
          type: string
        type:
          description: The type of the pages link
          type: string
        updated_at:
          description: Moment when the pages link was updated
          format: date-time
          type: string
      type: object
      x-public: true
    PaginationProperties:
      properties:
        count:
          description: Number of resources on current page.
          minimum: 0
          readOnly: true
          type: integer
        total:
          description: Total number of resources across all pages.
          minimum: 0
          readOnly: true
          type: integer
      type: object
      x-public: true
    Payment:
      description: |
        A payment resource is a recorded transfer of money from one party to another via a payment instrument to an account. Payments go through several states to track their progress based on interactions with the payfac and the instrument's issuing company.
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            checkout:
              description: The checkout that created this payment.
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  readOnly: true
                  type: string
              readOnly: true
              type: object
            donation:
              description: The donation that created this payment.
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  readOnly: true
                  type: string
              readOnly: true
              type: object
            end-user:
              description: The user that made the payment. See <https://api-docs.subsplash.net/end-user-auth/#tag/EndUser>
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  readOnly: true
                  type: string
              readOnly: true
              type: object
            form-response:
              $ref: '#/components/schemas/FormResponse'
            instrument:
              description: The instrument used to make the payment. See <https://api-docs.subsplash.net/payments/#tag/Instrument>
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  readOnly: true
                  type: string
              readOnly: true
              type: object
            payment-intent:
              description: The payment intent that created this payment.
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  readOnly: true
                  type: string
              readOnly: true
              type: object
            payout:
              $ref: '#/components/schemas/Payout'
            profile:
              description: The profile of the end user that made the payment. See
                <https://api-docs.subsplash.net/people/#tag/Profile>
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  readOnly: true
                  type: string
              readOnly: true
              type: object
            refunds:
              description: A list of all refunds related to this payment.
              items:
                $ref: '#/components/schemas/Refund'
              type: array
            remote-deposit-item:
              $ref: '#/components/schemas/RemoteDepositItem'
            submission:
              $ref: '#/components/schemas/Submission'
            terminal:
              description: The terminal through which a payment was made. See <https://api-docs.subsplash.net/payments/#tag/Terminal>
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  readOnly: true
                  type: string
              readOnly: true
              type: object
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              checkout: Checkout
              donation: Donation
              end-user: EndUser
              form-response: Response
              profile: Profile
        _links:
          $ref: '#/components/schemas/Links'
        amount:
          description: The money object specifying the amount and currency for the
            current payment.
          properties:
            currency:
              description: Three-letter ISO currency code <https://www.iso.org/iso-4217-currency-codes.html>,
                in lowercase. Must be a supported currency <https://stripe.com/docs/currencies>
                for the payfac and account.
              enum:
              - USD
              - CAD
              example: USD
              pattern: ^[A-Z]{3}$
              type: string
            value:
              description: The amount of funds transferred for the payment in whole
                units of the smallest unit of measure for the specified currency.
              example: 5000
              maximum: 99999999
              minimum: 100
              type: integer
          readOnly: true
          type: object
        auth_code:
          description: The 6 character authorization_code from the credit card processor
            for card type payments.
          example: "123456"
          maxLength: 6
          readOnly: true
          type: string
        auth_date:
          description: The timestamp that the payment occurred on in the timezone
            for the Organization at the time of payment.
          example: "2021-03-03T23:50:51Z"
          format: date-time
          readOnly: true
          type: string
        check_number:
          description: When instrument type is `Check`, a check number may be included.
          example: "94038"
          maxLength: 17
          pattern: ^[0-9]{0,17}$
          type: string
        created_at:
          description: Moment when the resource was created in UTC.
          format: date-time
          readOnly: true
          type: string
        effective_amount:
          description: |
            The amount minus the sum of all partial refund amounts. When there are no refunds or the payment is fully refunded, this equals amount.
          properties:
            currency:
              description: Three-letter ISO currency code <https://www.iso.org/iso-4217-currency-codes.html>,
                in lowercase.
              enum:
              - USD
              - CAD
              example: USD
              pattern: ^[A-Z]{3}$
              readOnly: true
              type: string
            value:
              description: The effective amount in whole units of the smallest unit
                of measure for the specified currency.
              example: 5000
              readOnly: true
              type: integer
          readOnly: true
          type: object
        effective_fee:
          description: |
            The original fee minus the sum of all refund fees. When there are no refunds or the payment is fully refunded, this equals fee.
          properties:
            currency:
              description: Three-letter ISO currency code <https://www.iso.org/iso-4217-currency-codes.html>,
                in lowercase.
              enum:
              - USD
              - CAD
              example: USD
              pattern: ^[A-Z]{3}$
              readOnly: true
              type: string
            value:
              description: The effective fee in the same units as amount.
              example: 100
              readOnly: true
              type: integer
          readOnly: true
          type: object
        error_reason:
          description: For failed/errored payments, this provides the reason as to
            why the payment failed.
          example: card was declined.
          maxLength: 150
          readOnly: true
          type: string
        external_id:
          description: An external token representing this payment in the payment
            processor's system.
          example: py_12345678
          maxLength: 50
          type: string
        fee:
          description: the money object specifying the amount and currency (should
            be the same as the amount) of the fee to be paid on this payment.
          properties:
            currency:
              description: Three-letter ISO currency code <https://www.iso.org/iso-4217-currency-codes.html>,
                in lowercase. Must be a supported currency <https://stripe.com/docs/currencies>
                for the payfac and account.
              enum:
              - USD
              - CAD
              example: USD
              pattern: ^[A-Z]{3}$
              readOnly: true
              type: string
            value:
              description: The payment fee collected by the payments platform in the
                same units as amount.
              example: 100
              readOnly: true
              type: integer
          readOnly: true
          type: object
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        instrument_type:
          description: The type of payment instrument used to make the payment.
          enum:
          - ACH
          - Visa
          - American Express
          - MasterCard
          - Discover
          - JCB
          - Diners Club
          - Card
          - Check
          - Cash
          - Other
          example: Check
          type: string
        ip_address:
          description: The recorded ip address of the end user that initiated the
            payment.
          example: 105.65.38.124
          maxLength: 45
          readOnly: true
          type: string
        memo:
          description: An optional message related to the payment. Often these are
            written on checks.
          example: For Chase and John's summer camp registration.
          maxLength: 255
          type: string
        org_key:
          description: The identifier for the owning organization.
          example: SUBSPLSH
          format: /[A-Z0-9]{8}/
          type: string
        short_id:
          description: A unique and opaque integer identifier to be exposed to clients
            and end users for any use cases where using a UUID would not be appropriate.
          example: 1863295702
          readOnly: true
          type: integer
        state:
          deprecated: true
          description: DEPRECATED -> The state of the payment.
          enum:
          - preSubmit
          - declined
          - authorized
          - batched
          - chargedBack
          - successfullyRepresented
          - error
          - achSubmitted
          - achPending
          - achSuccess
          - achNoAccount
          - achAccountClosed
          - achInsufficientFunds
          - achInvalidCurrency
          - achNotAuthorized
          - achAccountFrozen
          - achAccountRestricted
          - achInvalidAccountNumber
          example: batched
          readOnly: true
          type: string
        status:
          description: The readable status of a payment to display.
          enum:
          - success
          - failure
          - pending
          - disputed
          - refunded
          - partial refund
          - transfer pending
          readOnly: true
          type: string
        tax_deductible:
          description: Whether the payment is tax deductible or not. Payments from
            Giving will default to tax deductible.
          example: true
          type: boolean
        updated_at:
          description: Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
      type: object
      x-public: true
    PaymentAccount:
      description: |
        An Account (or Client Gateway or just Gateway) is a resource that represents the configuration and options used to handle payments from an organization's terminal and to transfer funds from an end user to a client's PayFac account and finally to the client's bank account (Payment Source).
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            bank-account:
              allOf:
              - $ref: '#/components/schemas/Instrument'
              description: |
                The linked instrument resource for payouts to be paid to. See the Instrument model for the full description of fields. See <https://api-docs.subsplash.net/payments/#tag/Instrument>
            organization:
              description: The related organization resource. See <https://api-docs.subsplash.net/orgs/#tag/Organization>.
              properties:
                id:
                  description: The id for the owning organization.
                  format: uuid
                  type: string
              type: object
            terminals:
              description: The set of terminals that are configured to use this payment
                account. See <https://api-docs.subsplash.net/payments/#tag/Terminal>
              items:
                $ref: '#/components/schemas/Terminal'
              type: array
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              bank-account: Instrument
              organization: Organization
        card_fund_support:
          description: What kinds of card funds are supported by the payfac.
          items:
            enum:
            - credit
            - debit
            - prepaid
            - unknown
            type: string
          type: array
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        currency:
          description: |
            The selected currency for the payfac for payouts. The set of valid codes are defined in [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).
          maxLength: 3
          type: string
        disabled:
          default: false
          description: |
            A flag indicating if the Account is allowed to process payments or not. This is used to temporarily disable an account while the risk team is investigating potential fraud.
          type: boolean
        external_id:
          description: The external id of the payfac account.
          readOnly: true
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        instrument_support:
          description: The list of supported instrument types for the payfac.
          items:
            enum:
            - Visa
            - American Express
            - MasterCard
            - Discover
            - JCB
            - ACH
            type: string
          type: array
        legal_owner:
          description: The person declared as the legal owner of the account.
          properties:
            dob:
              description: The date of birth for the legal owner.
              format: date
              type: string
            email:
              description: |
                The email address of the legal owner. This field is used as a unique identifier for linking purposes with other resources that model persons in services.
              type: string
            first_name:
              description: The first name of the legal owner.
              type: string
            last_name:
              description: The last name of the legal owner.
              type: string
            tax_id:
              description: |
                Last four of the SSN for US accounts and full SIN for CA accounts. Note that this field should be encrypted at rest.
              maxLength: 10
              type: string
          type: object
        more_info_required:
          description: |
            A flag indicating if the Account requires more info indicated from Stripe.
          readOnly: true
          type: boolean
        org_key:
          description: The identifier for the owning organization.
          format: /[A-Z0-9]{8}/
          readOnly: true
          type: string
        payments_enabled:
          description: |
            A flag indicating if the Account has payments enabled which means the Stripe account is fully activated and ready to process payments.
          readOnly: true
          type: boolean
        payout_schedule:
          description: |
            A pseudo-resource for the schedule for which payouts are processed for the account. The payfac is responsible for managing these settings and executing the payouts at the specified schedule.
          properties:
            delay_days:
              description: |
                The number of days charge funds are held before being paid out. May also be set to minimum, representing the lowest available value for the account country. Default is minimum. The delay_days parameter does not apply when the interval is manual.
              pattern: ^[0-9]|minimum$
              type: string
            interval:
              default: daily
              description: How frequently available funds are paid out.
              enum:
              - daily
              - manual
              - weekly
              - monthly
              type: string
            weekly_anchor:
              description: |
                The day of the week when available funds are paid out, specified as monday, tuesday, etc. (required and applicable only if interval is weekly.)
              enum:
              - monday
              - tuesday
              - wednesday
              - thursday
              - friday
              - saturday
              - sunday
              type: string
          type: object
        rates:
          description: |
            The rates information defines the base and customized fee options for a given payment account. The base rates are based on which tier (standard/giving_only) a client is a part of. The rate fee values are either percentage based or flat and apply when the platform executes payments of different types, using different instruments, and the payments service takes a portion of the amount transferred. The payments service controls what are known as the “base” rates, which are applied to the majority of accounts, but in some circumstances we negotiate custom rates with specific clients which the payments service applies on a per-account basis.

            For example, if both credit.flat_fee and card.flat_fee are defined, but debit.flat_fee is not, then a payment with a credit card will use the rate from credit.flat_fee, but a payment with a debit card will use the rate from card.flat_fee because it's a type of card and there's no option defined for debit.flat_fee.
          properties:
            base:
              allOf:
              - $ref: '#/components/schemas/Rates'
              description: Our base rate values based on the value for the current
                tier. These values are used by the front end code when calculating
                the rates for donors-cover fees so that values for the custom rate
                negotiations aren't made public.
              readOnly: true
            overrides:
              allOf:
              - $ref: '#/components/schemas/Rates'
              description: The per-client negotiated rate overrides. These values
                are used when calculating the per transaction fees charged to clients
                when communicating with the payfac.
            tier:
              description: A pricing level type for the given client. This is based
                on what package the client is signed up for.
              enum:
              - standard
              - giving_only
              type: string
          type: object
        remote_deposits_enabled:
          description: |
            A flag indicating if the Account is able to receive remote check deposits.
          type: boolean
        sic:
          description: The 4 digit SIC/Standard Industry Code. Note that this can
            be different from a MCC.
          pattern: ^[0-9]{4}$
          type: integer
        skip_ach_verification:
          default: false
          description: |
            If true, allows ACH accounts to be added by donors without the micro-deposit verification process usually required by stripe
          type: boolean
        status:
          default: disabled
          description: |
            The status of the account.
          enum:
          - disabled
          - active
          - pending
          - unknown
          type: string
        terms_of_service:
          properties:
            acceptance_date:
              description: The time that the terms of service was accepted by the
                client.
              format: date-time
              type: string
            ip:
              description: The ip address from which the client accepted the terms
                of service.
              maxLength: 45
              type: string
              writeOnly: true
          type: object
        updated_at:
          description: Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
      type: object
      x-public: true
    PaymentForm:
      description: |
        A Payment Form represents the configuration options that allow for clients to process non-charitable payments. A Payment Form primarily controls the options presented to end users when using the form to submit a non-charitable payment.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      required:
      - org_key
      type: object
    PaymentIntent:
      description: |
        This is the request/response body when creating a Payment Intent
      properties:
        _embedded:
          properties:
            account:
              description: The payment account that's associated with this Setup Intent
              properties:
                id:
                  description: The payment account ID
                  example: e4f74836-915b-8c34-be56-3ab24a138401
                  format: uuid
                  type: string
              readOnly: true
              type: object
            form-response:
              $ref: '#/components/schemas/FormResponse'
            profile:
              description: |
                The profile associated with this Payment Intent.  Either an existing profile ID or a combination of first, last, and email are required.
              properties:
                email:
                  description: The email of the profile associated with this Payment
                    Intent. Required for guests.
                  example: john.doe@subsplash.com
                  type: string
                  writeOnly: true
                first_name:
                  description: The first name of the profile associated with this
                    Payment Intent. Required for guests.
                  example: John
                  type: string
                  writeOnly: true
                id:
                  description: The ID of the profile
                  example: 97b76855-d1d5-0fc9-d759-08b280f3b230
                  format: uuid
                  readOnly: true
                  type: string
                last_name:
                  description: The last name of the profile associated with this Payment
                    Intent. Required for guests.
                  example: Doe
                  type: string
                  writeOnly: true
              type: object
          required:
          - profile
          type: object
        amount:
          description: The money object specifying the amount and currency for the
            current payment.
          properties:
            currency:
              description: Three-letter ISO currency code, in lowercase. Must be a
                supported currency for the payfac and account. For Check21 deposits
                from SmartPay RDC, the currency will ALWAYS be USD.
              type: string
            value:
              description: The integer amount of funds transferred for the payment
                in whole units of the smallest unit of measure for the specified currency.
              type: integer
          type: object
        app_key:
          example: CHURCH
          type: string
        automatic_payment_methods_enabled:
          default: false
          type: boolean
        client_secret:
          example: pi_1M1hkgCyNv84EeVk75UONG4n_secret_MlE1DP0lqWwBKNxrIFdYlgBH9tNKQOc
          readOnly: true
          type: string
        created_at:
          description: Moment when the resource was created in UTC.
          format: date-time
          readOnly: true
          type: string
        id:
          example: pi_1M1hkgCyNv84EeVk75UONG4n
          readOnly: true
          type: string
        links:
          $ref: '#/components/schemas/Links'
        manual_capture:
          default: false
          description: |
            If `true`, the payment is authorized but not captured when the customer completes the payment. Use POST `/payment-intents/{id}/capture` later to capture the full amount. If `false` or omitted, the payment is captured automatically upon confirmation.
          type: boolean
        one_time:
          default: false
          description: Whether or not this should be considered a one time payment.
            Always true for guest users.
          type: boolean
        verification_token:
          description: The captcha verification token for the Payment Intent.
          type: string
      required:
      - _embedded
      - app_key
      - amount
      type: object
      x-public: true
    PaymentUser:
      description: |
        DEPRECATED -> A Payment User is really just a JOIN table between an End User and a Payment Account so we will not be exposing this in the Payments API.

        A payment user resource models a given end user in the domain of payments in a single organization and payment account. A payment user can be related to an Auth service App User, which allows a user to log in with a supported service (SS Login/Facebook/PCO).
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    Payout:
      description: |
        A Payout (previously a transfer) is the transfer of funds from the payfac to a bank account. This can apply when funds a transferred for the platform's main subsplash account, or for a client's payout from their connected account to their bank account. A payout is “applied” or “related” to a group of payments/refunds/adjustments.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
      x-subsplash-sdk:
        forceCreateTypes:
          amount: Money
          fee: Money
          net: Money
    Payout2:
      description: |
        A Payout is the transfer of funds from the payfac to a bank account. This can apply when funds are transferred for the platform’s main subsplash account, or for a client’s payout from their connected account to their bank account. A payout is “applied” or “related” to a group of payments/refunds/adjustments.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
      x-subsplash-sdk:
        forceCreateTypes:
          amount: Money
          fee: Money
    PendingPayoutItem:
      description: A transaction of some kind waiting to be paid out to a client's
        bank account.
      properties:
        fee:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: Fee amount of the pending payout item
          readOnly: true
        gross:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: Gross amount of the pending payout item
          readOnly: true
        net:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: Net amount of the pending payout item
          readOnly: true
      type: object
    PeopleList:
      description: |
        The PeopleList resource represents a list of people. Static lists are manually managed.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        created_by:
          $ref: '#/components/schemas/PeopleListCreatedBy'
        description:
          description: Client defined additional information about the people list.
          maxLength: 512
          nullable: true
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        last_updated_by:
          $ref: '#/components/schemas/PeopleListLastUpdatedBy'
        member_count:
          description: |
            The number of profiles that are currently in the people list.
          minimum: 0
          type: integer
        name:
          description: The client defined name of the people list.
          maxLength: 255
          type: string
        org_key:
          description: The identifier for the owning organization.
          pattern: '[A-Z0-9]{8}'
          type: string
        type:
          description: |
            The type of the people list. Dictates how the list is populated.
            - `static` = Profiles are manually added or removed. There are no filters that dictate which profiles are included.
          enum:
          - static
          type: string
        updated_at:
          description: |
            Moment when the resource was updated most recently by the last updated by actor. Actions that fall under the scope of updating include:
            - Adding or removing profiles from the list
            - Updating the name or description of the list
            - Deleting the list
          format: date-time
          readOnly: true
          type: string
      required:
      - id
      - org_key
      - type
      - name
      - member_count
      - created_by
      - last_updated_by
      - created_at
      - updated_at
      type: object
      x-public: true
    PeopleListCreate:
      description: |
        Available fields used to create a PeopleList.
      properties:
        created_by:
          description: |
            Optional metadata about who created the people list.

            For service tokens from the data-import service, this field is required and must include `service`, `resource_type`, and `resource_id`.

            For user tokens from Accounts or Tokens services, this field is optional. If not provided, it will default to the authenticated user's information. If provided, the values must match the authenticated user's information.
          properties:
            resource_id:
              description: The ID of the resource that created the people list.
              format: uuid
              type: string
            resource_type:
              description: |
                The type of the resource that created the people list.
                - For Accounts service tokens: must be "user"
                - For Tokens service tokens: must be "api_client"
                - For data-import service tokens: must be "import"
              type: string
            service:
              description: The service that created the resource.
              type: string
          type: object
        description:
          description: Client defined additional information about the people list.
          maxLength: 512
          nullable: true
          type: string
        name:
          description: The client defined name of the people list.
          maxLength: 255
          type: string
        org_key:
          description: The organization key for the people list.
          pattern: '[A-Z0-9]{8}'
          type: string
        type:
          description: |
            The type of the people list. Dictates how the list is populated.
            - `static` = Profiles are manually added or removed. There are no filters that dictate which profiles are included.
          enum:
          - static
          type: string
      required:
      - org_key
      - name
      - type
      type: object
      x-public: true
    PeopleListCreatedBy:
      description: |
        Information about the actor that created the people list.
      properties:
        resource_id:
          description: The ID of the resource that created the people list.
          format: uuid
          nullable: true
          type: string
        resource_type:
          description: The type of the resource that created the people list (e.g.,
            "user").
          nullable: true
          type: string
        service:
          description: The service that created the resource.
          type: string
      required:
      - service
      type: object
      x-public: true
    PeopleListLastUpdatedBy:
      description: |
        Information about the actor that last updated the people list. Actions that fall under the scope of updating include:
        - Adding or removing profiles from the list
        - Updating the name or description of the list
        - Deleting the list
      properties:
        resource_id:
          description: The ID of the resource that updated the people list.
          format: uuid
          nullable: true
          type: string
        resource_type:
          description: The type of the resource that updated the people list (e.g.,
            "user").
          nullable: true
          type: string
        service:
          description: The service that updated the resource.
          type: string
      required:
      - service
      type: object
      x-public: true
    PeopleListMember:
      description: |
        The PeopleListMember resource represents a profile that is a member of a people list.
      properties:
        _embedded:
          nullable: true
          properties:
            people-list:
              $ref: '#/components/schemas/PeopleList'
            profile:
              $ref: '#/components/schemas/ProfileResponse'
          type: object
        _links:
          $ref: '#/components/schemas/Links'
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        created_by:
          $ref: '#/components/schemas/PeopleListMemberCreatedBy'
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        last_updated_by:
          $ref: '#/components/schemas/PeopleListMemberLastUpdatedBy'
        org_key:
          description: The identifier for the owning organization.
          pattern: '[A-Z0-9]{8}'
          type: string
        updated_at:
          description: |
            Moment when the resource was updated most recently by the last updated by actor.
          format: date-time
          readOnly: true
          type: string
      required:
      - id
      - org_key
      - created_at
      - updated_at
      type: object
      x-public: true
    PeopleListMemberCreate:
      description: |
        Available fields used to create a PeopleListMember (add a profile to a people list).
      properties:
        _embedded:
          description: Embedded resources required for creating a people list member.
          properties:
            people-list:
              description: The people list to add the profile to.
              properties:
                id:
                  description: The UUID of the people list.
                  format: uuid
                  type: string
              required:
              - id
              type: object
            profile:
              description: The profile to add to the people list.
              properties:
                id:
                  description: The UUID of the profile.
                  format: uuid
                  type: string
              required:
              - id
              type: object
          required:
          - people-list
          - profile
          type: object
        created_by:
          description: |
            Optional metadata about who created the people list member.

            For service tokens from the data-import service, this field is required and must include `service`, `resource_type`, and `resource_id`.

            For user tokens from Accounts or Tokens services, this field is optional. If not provided, it will default to the authenticated user's information. If provided, the values must match the authenticated user's information.
          properties:
            resource_id:
              description: The ID of the resource that created the people list member.
              format: uuid
              type: string
            resource_type:
              description: |
                The type of the resource that created the people list member.
                - For Accounts service tokens: must be "user"
                - For Tokens service tokens: must be "api_client"
                - For data-import service tokens: must be "import"
              type: string
            service:
              description: The service that created the resource.
              type: string
          type: object
        org_key:
          description: The organization key for the people list member.
          pattern: '[A-Z0-9]{8}'
          type: string
      required:
      - org_key
      - _embedded
      type: object
      x-public: true
    PeopleListMemberCreatedBy:
      description: |
        Information about the actor that created the people list member.
      properties:
        resource_id:
          description: The ID of the resource that created the people list member.
          format: uuid
          nullable: true
          type: string
        resource_type:
          description: The type of the resource that created the people list member
            (e.g., "user").
          nullable: true
          type: string
        service:
          description: The service that created the resource.
          type: string
      required:
      - service
      type: object
      x-public: true
    PeopleListMemberJob:
      description: |
        The PeopleListMemberJob resource represents a background job that processes people list membership operations.
      properties:
        _embedded:
          properties:
            people-list:
              properties:
                id:
                  description: The ID of the people list the job adds members to.
                  format: uuid
                  type: string
              type: object
          type: object
        _links:
          $ref: '#/components/schemas/Links'
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        created_by:
          $ref: '#/components/schemas/PeopleListMemberJobCreatedBy'
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        org_key:
          description: The identifier for the owning organization.
          pattern: '[A-Z0-9]{8}'
          type: string
        profiles_added:
          description: |
            Total number of profiles that were added to the list. Set by the processor when the job completes. Null until set.
          nullable: true
          readOnly: true
          type: integer
        query:
          $ref: '#/components/schemas/PeopleListMemberJobQuery'
        status:
          description: The current status of the job.
          enum:
          - ready_to_start
          - in_progress
          - complete
          - failed
          type: string
        total_profiles_matching_query:
          description: |
            Total number of profiles that match the job's search query. Set by the processor when the job runs. Null until set.
          nullable: true
          readOnly: true
          type: integer
        updated_at:
          description: |
            Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
      required:
      - id
      - org_key
      - status
      - created_at
      - updated_at
      type: object
      x-public: true
    PeopleListMemberJobCreatedBy:
      description: |
        Information about the actor that created the people list member job.
      properties:
        resource_id:
          description: The ID of the resource that created the job.
          format: uuid
          nullable: true
          type: string
        resource_type:
          description: The type of the resource that created the job (e.g., "user").
          nullable: true
          type: string
        service:
          description: The service that created the resource.
          type: string
      required:
      - service
      type: object
      x-public: true
    PeopleListMemberJobQuery:
      description: |
        Query parameters that were used to select profiles for the job.
      properties:
        filters:
          description: The filters applied to the profile search.
          items:
            $ref: '#/components/schemas/ProfileQueryFilter'
          nullable: true
          type: array
        search_term:
          description: The search term used to filter profiles.
          nullable: true
          type: string
        sort:
          description: The sort order applied to the profile search.
          nullable: true
          type: string
      type: object
      x-public: true
    PeopleListMemberLastUpdatedBy:
      description: |
        Information about the actor that last updated the people list member.
      properties:
        resource_id:
          description: The ID of the resource that updated the people list member.
          format: uuid
          nullable: true
          type: string
        resource_type:
          description: The type of the resource that updated the people list member
            (e.g., "user").
          nullable: true
          type: string
        service:
          description: The service that updated the resource.
          type: string
      required:
      - service
      type: object
      x-public: true
    PeopleListUpdate:
      description: |
        Available fields used to update a PeopleList.
      properties:
        description:
          description: Client defined additional information about the people list.
          maxLength: 512
          nullable: true
          type: string
        name:
          description: The client defined name of the people list.
          maxLength: 255
          type: string
      type: object
      x-public: true
    PhoneNumber:
      description: An unformatted phone number. Follows the [E.164](https://www.itu.int/rec/T-REC-E.164/en)
        standard which allows for up to 15 digits for a complete international phone
        number.
      example: "2538081983"
      format: phone
      maxLength: 15
      minLength: 10
      pattern: '[0-9]{10,15}'
      type: string
      x-public: true
    PhoneNumberCountry:
      description: Country information for a phone number.
      properties:
        calling_code:
          description: The international calling code with plus sign (e.g., "+1",
            "+44").
          example: "+1"
          pattern: ^\+[0-9]{1,4}$
          type: string
        region_code:
          description: The ISO 3166-1 alpha-2 country code (e.g., "US", "CA").
          example: US
          pattern: ^[A-Z]{2}$
          type: string
      required:
      - region_code
      - calling_code
      type: object
      x-public: true
    PhoneNumberWithCountryCode:
      description: A phone number object with country information and validation.
      properties:
        country:
          $ref: '#/components/schemas/PhoneNumberCountry'
        significant:
          description: The national number part of the phone number (without country
            code).
          example: "2538081983"
          type: string
      required:
      - significant
      - country
      type: object
      x-public: true
      x-subsplash-sdk:
        forceCreateTypes:
          country: PhoneNumberCountry
    PlatformEndpoint:
      description: A Platform Endpoint represents the device end of a communication
        channel used for push notifications.
      properties:
        _embedded:
          description: Embedded properties of Platform Endpoint.
          type: object
        _links:
          $ref: '#/components/schemas/SelfLinkPublic'
        app_install_id:
          description: Unique ID of an app install. Required if `legacy_app_install_id`
            is not provided
          format: binary
          type: string
        app_key:
          pattern: ^[A-Z0-9]{6}$
          type: string
        aws_sns_endpoint_arn:
          description: Platform Endpoint Amazon Resource Name.
          type: string
        created_at:
          description: Moment when the platform endpoint was created.
          format: date-time
          readOnly: true
          type: string
        deleted_at:
          description: Moment when the platform endpoint was deleted.
          format: date-time
          readOnly: true
          type: string
        id:
          description: The unique identifier of the platform endpoint
          format: uuid
          type: string
        legacy_app_install_id:
          description: Unique ID of an app install (legacy). Required if `app_install_id`
            is not provided
          type: integer
        platform:
          enum:
          - itunes
          - itunes_sandbox
          - google_play
          type: string
        token:
          description: Unique token assigned to the device after it registers with
            its corresponding push notification service (APNS, GCM, or FCM).
          type: string
        updated_at:
          description: Moment when the platform endpoint was last changed.
          format: date-time
          readOnly: true
          type: string
      type: object
      x-public: true
    PlayerPrompt:
      properties:
        _embedded:
          properties:
            media-item:
              description: The related media item. Cannot be set for default resources.
              properties:
                id:
                  format: uuid
                  type: string
              required:
              - id
              type: object
          required:
          - media-item
          type: object
        _links:
          $ref: '#/components/schemas/Links'
        app_key:
          description: Six character app code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        body:
          description: Body of message.
          maxLength: 250
          type: string
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        default:
          description: Whether or not this is a default or template resource. Only
            one default resource allowed per type and app_key. Default resources alow
            for clients to save defaults for a given resource, that can be recalled
            later to auto-fill fields for new resources.
          type: boolean
        display_duration_secs:
          default: 30
          description: |
            The number of seconds a prompt should be shown for, before being hidden.
          minimum: 0
          readOnly: true
          type: integer
        giving:
          description: The settings for a prompt with type set to 'give'. Not present
            for other types.
          properties:
            default_amounts:
              default: true
              description: Denotes that the prompt will display the default amounts
                of $10, $50, $100, Custom. Setting this to false displays no amounts
                and provides an alternate experience with a tap/click that takes the
                user to the giving form with no pre-filled options.
              type: boolean
          type: object
        id:
          description: Unique identifier for the resource.
          format: uuid
          type: string
        title:
          description: Title of message.
          maxLength: 30
          type: string
        trigger_time:
          description: |
            The number of seconds into media at which the prompt should be shown.
          minimum: 0
          type: integer
        type:
          description: The type of prompt. Only 'give' is supported at the moment.
          enum:
          - give
          type: string
        updated_at:
          description: Moment when the resource was updated.
          format: date-time
          readOnly: true
          type: string
      required:
      - type
      type: object
      x-public: true
    PledgeCreate:
      properties:
        amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount of the pledge.
      required:
      - org_key
      - amount
      - _embedded
      type: object
    PledgeResponse:
      properties:
        _links:
          $ref: '#/components/schemas/Links'
        amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: The amount of the pledge.
        gross_given:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: gross sum of given gifts associated with this pledge.
      type: object
    PledgeUpdate:
      description: The update request for a Pledge. No fields are editable if related
        campaign in non-active state.
      properties:
        amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: Optional - Currency is not editable but is allowed on a request
            provided it matches.
      type: object
    Profile:
      description: |
        The Profile is a resource that represents an organization's view of an EndUser. The data in this resource is completely owned by the client/organization, and edits are allowed by admins of the org.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    ProfileMaritalStatus:
      description: |
        The user's marital status.
        - single
        - married
        - divorced
        - separated
        - widowed
      enum:
      - single
      - married
      - divorced
      - separated
      - widowed
      type: string
      x-public: true
    ProfileRequest:
      description: |
        The Profile is a resource that represents an organization's view of an EndUser. The data in this resource is completely owned by the client/organization, and edits are allowed by admins of the org.
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            address:
              allOf:
              - $ref: '#/components/schemas/Address'
              description: |
                The related end user auth resource. <https://api-docs.subsplash.net/#tag/Address>
                On Create operations, if an 'id' is provided then the linked address is checked for existence
                and org_key matching and linked to the new profile. If no 'id' is provided, but values for
                an address are provided in the _embedded, then the service will first attempt to create a
                new address resource with the provided data, and upon success, the 'id' for that resource
                will be used to link the new profile to the new address.
            end-user:
              description: |
                The related end user auth resource. <https://api-docs.subsplash.net/#tag/EndUser>
              properties:
                id:
                  description: The id for the end user.
                  format: uuid
                  type: string
              type: object
            household:
              allOf:
              - $ref: '#/components/schemas/Household'
              description: |
                The related household resource. <https://api-docs.subsplash.net/people/#tag/Household>
            latest-membership-status-change:
              allOf:
              - $ref: '#/components/schemas/LatestMembershipStatusChange'
              description: |
                The latest membership status change resource connected to the profile.
              x-public: true
            photo:
              description: |
                The photo attached to this profile.
              properties:
                id:
                  description: The id for the photo stored in the files service (accessible
                    via the images service).
                  format: uuid
                  type: string
              type: object
          required:
          - end-user
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              address: locations.Address
              end-user: EndUser
              household: Household
              latest-membership-status-change: LatestMembershipStatusChange
              photo: files.Image
            forceCreateTypes:
              latest-membership-status-change: LatestMembershipStatusChange
        _links:
          $ref: '#/components/schemas/Links'
        academic_grade:
          $ref: '#/components/schemas/AcademicGrade'
        allergy_notes:
          description: Profile notes for allergy information.
          maxLength: 1500
          type: string
        baptism_date:
          description: When the user was baptized.
          format: date
          nullable: true
          type: string
        care_notes:
          description: |
            Profile notes for special care information. These notes are indicated to the client as "private" in the dashboard.

            Note: this field is only displayed for child profiles.
          maxLength: 1500
          type: string
        contact_id:
          description: The fluro contact object id.
          type: string
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        created_source:
          $ref: '#/components/schemas/CreatedSource'
        custom_fields:
          description: |
            A list of custom field values associated with the profile. These fields
            must be defined by a [CustomFieldDefinition](#tag/CustomFieldDefinition)
            resource.

            Note if the `custom_fields` array is present in the update request, the
            custom fields data will be treated as all-or-nothing, meaning the data
            present will overwrite what is currently stored on the Profile.
          items:
            $ref: '#/components/schemas/CustomFieldValueInput'
          type: array
        date_of_birth:
          description: When the user was born.
          format: date
          nullable: true
          type: string
        email:
          description: The primary email address of the user.
          format: email
          maxLength: 256
          type: string
        emails:
          description: The secondary/alternate email addresses of the user. Order
            is not kept.
          items:
            properties:
              email:
                format: email
                maxLength: 256
                type: string
            type: object
          type: array
        external_id:
          description: A free form string field that allows for clients to reference
            a person in any arbitrary external system by that system's unique identifier.
            This field is readable and writable by clients and used to reference to
            some record in another 3P system they are using for importing data. This
            field is not validated, nor does any internal business logic depend on
            this field.
          maxLength: 50
          type: string
        first_name:
          description: The first name of the user.
          maxLength: 35
          type: string
        fluro_data:
          additionalProperties: true
          description: a hidden field used for additional fluro data included in this
            group
          type: object
        gender:
          description: The user's gender. Note that case and single-letter are normalized.
            Eg, "m" and "Male" will be normalized to "male".
          type: string
        graduation_year:
          $ref: '#/components/schemas/GraduationYear'
        household_role:
          $ref: '#/components/schemas/HouseholdRole'
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        last_name:
          description: The last name of the user.
          maxLength: 35
          type: string
        marital_status:
          $ref: '#/components/schemas/ProfileMaritalStatus'
        org_key:
          description: The identifier for the owning organization.
          pattern: '[A-Z0-9]{8}'
          type: string
        phone:
          allOf:
          - $ref: '#/components/schemas/PhoneNumber'
          deprecated: true
          description: This field is deprecated in favor of `phone_number`.
        phone_number:
          $ref: '#/components/schemas/PhoneNumberWithCountryCode'
        phones:
          description: The secondary/alternate phone numbers of the user. Order is
            not kept.
          items:
            properties:
              phone:
                $ref: '#/components/schemas/PhoneNumber'
            type: object
          type: array
        short_id:
          description: The primary_key of a resource.
          type: integer
        status:
          $ref: '#/components/schemas/ProfileStatus'
        updated_at:
          description: Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
        updated_by_user:
          $ref: '#/components/schemas/UpdatedByUser'
      required:
      - org_key
      - first_name
      - last_name
      type: object
      x-public: true
    ProfileResponse:
      description: |
        The Profile is a resource that represents an organization's view of an EndUser. The data in this resource is completely owned by the client/organization, and edits are allowed by admins of the org.
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            address:
              allOf:
              - $ref: '#/components/schemas/Address'
              description: |
                The related end user auth resource. <https://api-docs.subsplash.net/#tag/Address>
                On Create operations, if an 'id' is provided then the linked address is checked for existence
                and org_key matching and linked to the new profile. If no 'id' is provided, but values for
                an address are provided in the _embedded, then the service will first attempt to create a
                new address resource with the provided data, and upon success, the 'id' for that resource
                will be used to link the new profile to the new address.
            end-user:
              description: |
                The related end user auth resource. <https://api-docs.subsplash.net/#tag/EndUser>
              properties:
                id:
                  description: The id for the end user.
                  format: uuid
                  type: string
              type: object
            household:
              allOf:
              - $ref: '#/components/schemas/Household'
              description: |
                The related household resource. <https://api-docs.subsplash.net/people/#tag/Household>
            latest-membership-status-change:
              allOf:
              - $ref: '#/components/schemas/LatestMembershipStatusChange'
              description: |
                The latest membership status change resource connected to the profile.
              x-public: true
            photo:
              description: |
                The photo attached to this profile.
              properties:
                id:
                  description: The id for the photo stored in the files service (accessible
                    via the images service).
                  format: uuid
                  type: string
              type: object
          required:
          - end-user
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              address: locations.Address
              end-user: EndUser
              household: Household
              latest-membership-status-change: LatestMembershipStatusChange
              photo: files.Image
            forceCreateTypes:
              latest-membership-status-change: LatestMembershipStatusChange
        _links:
          $ref: '#/components/schemas/Links'
        academic_grade:
          $ref: '#/components/schemas/AcademicGrade'
        allergy_notes:
          description: Profile notes for allergy information.
          maxLength: 1500
          type: string
        baptism_date:
          description: When the user was baptized.
          format: date
          nullable: true
          type: string
        care_notes:
          description: |
            Profile notes for special care information. These notes are indicated to the client as "private" in the dashboard.

            Note: this field is only displayed for child profiles.
          maxLength: 1500
          type: string
        contact_id:
          description: The fluro contact object id.
          type: string
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        created_source:
          $ref: '#/components/schemas/CreatedSource'
        custom_fields:
          description: A list of custom field values associated with the profile.
            These fields must be defined by a [CustomFieldDefinition](#tag/CustomFieldDefinition)
            resource.
          items:
            $ref: '#/components/schemas/CustomFieldValue'
          type: array
        date_of_birth:
          description: When the user was born.
          format: date
          nullable: true
          type: string
        email:
          description: The primary email address of the user.
          format: email
          maxLength: 256
          type: string
        emails:
          description: The secondary/alternate email addresses of the user. Order
            is not kept.
          items:
            properties:
              email:
                format: email
                maxLength: 256
                type: string
            type: object
          type: array
        external_id:
          description: A free form string field that allows for clients to reference
            a person in any arbitrary external system by that system's unique identifier.
            This field is readable and writable by clients and used to reference to
            some record in another 3P system they are using for importing data. This
            field is not validated, nor does any internal business logic depend on
            this field.
          maxLength: 50
          type: string
        first_name:
          description: The first name of the user.
          maxLength: 35
          type: string
        fluro_data:
          additionalProperties: true
          description: a hidden field used for additional fluro data included in this
            group
          type: object
        gender:
          description: The user's gender. Note that case and single-letter are normalized.
            Eg, "m" and "Male" will be normalized to "male".
          type: string
        graduation_year:
          $ref: '#/components/schemas/GraduationYear'
        household_role:
          $ref: '#/components/schemas/HouseholdRole'
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        last_name:
          description: The last name of the user.
          maxLength: 35
          type: string
        marital_status:
          $ref: '#/components/schemas/ProfileMaritalStatus'
        org_key:
          description: The identifier for the owning organization.
          pattern: '[A-Z0-9]{8}'
          type: string
        phone:
          allOf:
          - $ref: '#/components/schemas/PhoneNumber'
          deprecated: true
          description: This field is deprecated in favor of `phone_number`.
        phone_number:
          $ref: '#/components/schemas/PhoneNumberWithCountryCode'
        phones:
          description: The secondary/alternate phone numbers of the user. Order is
            not kept.
          items:
            properties:
              phone:
                $ref: '#/components/schemas/PhoneNumber'
            type: object
          type: array
        short_id:
          description: The primary_key of a resource.
          type: integer
        status:
          $ref: '#/components/schemas/ProfileStatus'
        updated_at:
          description: Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
        updated_by_user:
          $ref: '#/components/schemas/UpdatedByUser'
      required:
      - org_key
      - first_name
      - last_name
      type: object
      x-public: true
    ProfileStatus:
      default: active
      description: |
        The user profile's current status.
        - active = Profile is actively being used.
        - archived = Profile is not yet deleted so it is still accessible by users when specifically requested.
        - merged = Profile is no longer in use because it has been merged with another profile. Currently being used by Donor Merge Lite.
        - gdpr = Profile is no longer in use because the end user deleted their own account.
        - fraud = Profile is marked as fraud and should not be used in any capacity other than internal reasons.

        If the profile status is updated to `archived`, `fraud` or `gdpr` the profile will be removed from any household it is associated with.
      enum:
      - active
      - archived
      - merged
      - gdpr
      - fraud
      type: string
      x-public: true
    Rate:
      description: |
        A Rate describes the processing fees applied to a transaction. Rates can vary by instrument type, tax deductibility, and other criteria.
      properties:
        flat_fee:
          $ref: '#/components/schemas/Money'
      type: object
    Rates:
      description: The specific fee values for different transaction types.
      properties:
        ach:
          properties:
            flat_fee:
              description: The flat fee in cents per payment applied to each card
                type payment.
              type: integer
            percent_fee:
              description: The percentage fee applied to a payment for a ACH type
                payment.
              format: double
              type: number
          type: object
        card:
          properties:
            flat_fee:
              description: The flat fee in cents per payment applied to each card
                type payment.
              type: integer
            percent_fee:
              description: The percentage fee applied to a payment for a card type
                payment.
              format: double
              type: number
          type: object
        credit:
          properties:
            flat_fee:
              description: The flat fee in cents per payment applied to each credit
                card type payment.
              type: integer
            percent_fee:
              description: The percentage fee applied to a payment for a credit card
                type payment.
              format: double
              type: number
          type: object
        debit:
          properties:
            flat_fee:
              description: The flat fee in cents per payment applied to each debit
                card type payment.
              type: integer
            percent_fee:
              description: The percentage fee applied to a payment for a debit card
                type payment.
              format: double
              type: number
          type: object
      type: object
      x-public: true
    RecurringDonation:
      description: Representation of a recurring gift/donation to a given client and
        app, from a given donor with specifications for start date, frequency, interval
        etc.  This is a conceptual model representation of the give and recurring
        time_trigger currently in the wallet bc tables.
      properties:
        _embedded:
          properties:
            campus:
              deprecated: true
              properties:
                id:
                  format: uuid
                  type: string
                name:
                  description: Campus name attached to donation if applicable, will
                    not be included if the org has only one campus.
                  maxLength: 75
                  type: string
              type: object
            campuses:
              items:
                $ref: '#/components/schemas/Campus'
              type: array
            donor:
              properties:
                bc_id:
                  description: Wallet legacy database id for backwards compatibility.
                  readOnly: true
                  type: integer
                email:
                  description: Email address of the given donor.
                  maxLength: 50
                  type: string
                id:
                  format: uuid
                  readOnly: true
                  type: string
              type: object
            fund:
              deprecated: true
              properties:
                id:
                  description: Primary fund the donation is linked to even if subfund.
                  format: uuid
                  type: string
                name:
                  description: Fund name for fund this donation is linked to.
                  maxLength: 50
                  type: string
                parent:
                  properties:
                    id:
                      description: Possible parent fund the donation for the above
                        fund.
                      format: uuid
                      type: string
                    name:
                      description: Fund name for parent fund if exists.
                      maxLength: 50
                      type: string
                  type: object
              type: object
            funds:
              items:
                $ref: '#/components/schemas/Fund'
              type: array
            org:
              description: Wallet API Client object.
              properties:
                bc_id:
                  description: Wallet legacy database id for backwards compatibility.
                  readOnly: true
                  type: integer
                id:
                  format: uuid
                  readOnly: true
                  type: string
                time_zone:
                  description: Time zone for the given client in the IANA standard
                    format, useful for making sure dates are shown in the client timezone
                    instead of UTC.
                  maxLength: 35
                  type: string
              type: object
            payment-source:
              properties:
                expiration:
                  description: The year and month that the card expires. Omitted for
                    banks.
                  example:
                    month: 1
                    year: 2038
                  items:
                    $ref: '#/components/schemas/CardExpiration'
                  type: object
                id:
                  format: uuid
                  type: string
                last_four:
                  description: The last four of the payment source, encrypted before
                    stored.
                  pattern: ^[0-9]{4}$
                  type: string
                type:
                  description: Type of payment source such as Visa or Bank.
                  maxLength: 5
                  type: string
              type: object
            profile:
              description: The donor who setup the recurring donation. Only returned
                when specified in the include query parameter.
              properties:
                id:
                  description: The unique identifier for this profile.
                  example: ec194b59-9fe2-4a2e-8c1d-91d0c32f8e5c
                  format: uuid
                  type: string
              type: object
            terminal:
              properties:
                dba:
                  description: Terminal dba which is usually the same as the client
                    name.
                  maxLength: 100
                  type: string
                email:
                  description: Support email for the terminal.
                  maxLength: 100
                  type: string
              type: object
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              campus: _
              campuses: _
        amount:
          description: Total amount for this RecurringDonation in decimal format,
            to two decimal places.
          type: integer
        app_key:
          description: Six character app code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        created_at:
          description: Date this recurring gift was created (ts_created in time_trigger
            record).
          format: date-time
          type: string
        currency:
          description: The currency of the above amount (currently only "USD" and
            "CAD" are supported).
          maxLength: 3
          type: string
        description:
          description: A human-readable description of the RRULE
          type: string
        designations:
          $ref: '#/components/schemas/Designations'
        donor_covered_fee:
          description: Flag indicating if the donor opted to cover fees.
          type: boolean
        donor_memo:
          description: optional donor memo they can add as a note to any donation
            or recurring donation.
          maxLength: 255
          type: string
        id:
          description: The unique identifier for this recurring donation.
          format: uuid
          type: string
        is_paused:
          description: |
            True when the recurring gift is paused (`time_triggers.flags` includes the paused bit, documented as the "c" flag).
          type: boolean
        last_processed_at:
          description: References the most recent gift date related to this recurring
            donation.
          format: date-time
          type: string
        next_process_at:
          description: The next date/time this RecurringDonation should process (basically
            becomes the "start date" of the specified recurrence rule).
          format: date-time
          type: string
        notice_sent:
          description: |
            True when a reminder has been sent for the next scheduled processing
            (`time_triggers.flags` includes the notice-sent bit, documented as the "a" flag).
            Auto-cleared whenever `next_process_at` is updated so the reminder cron will
            re-notify for the new processing date.
          type: boolean
        org_key:
          description: The identifier for the owning organization.
          example: SUBSPLSH
          format: /[A-Z0-9]{8}/
          readOnly: true
          type: string
        recurrence_rule:
          description: RRULE specification string containing the parameters for the
            recurring donation rules such as "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1".
          maxLength: 150
          type: string
        scheduler_migrated:
          description: Indicates whether this recurring donation has been migrated
            to the new Donation Scheduler system. Exposed to support migration verification
            and debugging.
          type: boolean
        short_id:
          description: A shorter identifier for this recurring donation.
          type: integer
        status:
          default: active
          description: |
            Status indicates the current state of the `RecurringDonation`.

            `active` recurring donations are recurring donations that will process at the time of the `next_processed_at` date.

            `canceled` recurring donations are recurring donations that have been stopped by the end user or potentially an admin or employee.

            `failed` recurring donations are recurring donations that encountered an error while processing the transaction. This error could have come from the payfac (i.e Stripe) or within another Subsplash service.
          enum:
          - active
          - canceled
          - failed
          type: string
        updated_at:
          description: Moment when the resource was most recently updated in UTC.
          format: date-time
          type: string
      type: object
      x-public: true
    RecurringDonationCreate:
      properties:
        designations:
          $ref: '#/components/schemas/Designations'
      required:
      - org_key
      - recurrence_rule_string
      - designations
      - instrument
      - terminal_id
      type: object
    Refund:
      description: |
        A refund is a reversal of a payment that was previously been created but not yet fully refunded. Funds are transferred back to the payment instrument that was originally charged. A refund is primarily performed on a payment via the giving dashboard from a client account.
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            issued-by:
              description: |
                A generic pseudo-resource that represents the person that issued the refund (generally a person that's a part of the org owning the payment account). The resource includes a uuid and a free-form type field. Clients of the payment service can use this to relate the refund to the entity in that system that can issue a refund.
              properties:
                id:
                  description: The id for the issuer resource.
                  format: uuid
                  type: string
                type:
                  description: The type for the issuer
                  maxLength: 25
                  type: string
              type: object
            organization:
              description: |
                The related organization resource. See <https://api-docs.subsplash.net/orgs/#tag/Organization>
              properties:
                id:
                  description: The id for the organization.
                  format: uuid
                  type: string
              type: object
            payment:
              allOf:
              - $ref: '#/components/schemas/Payment'
              description: |
                The related payment. See <https://api-docs.subsplash.net/#tag/Payment>
            payout:
              allOf:
              - $ref: '#/components/schemas/Payout'
              description: |
                The related payout resource. See <https://api-docs.subsplash.net/#tag/Payout>
          type: object
          x-subsplash-sdk:
            fieldResourceTypes:
              issued-by: User
              organization: Organization
        _links:
          $ref: '#/components/schemas/Links'
        amount:
          description: The gross amount of funds transferred for the payment in whole
            units of the smallest unit of measure for the specified currency.
          type: integer
        created_at:
          description: Moment when the resource was created in UTC.
          format: date-time
          readOnly: true
          type: string
        external_id:
          description: |
            The identifier for the refund in the payfac.
          example: pyr_1234567890ABCabcABCabcaB
          maxLength: 40
          readOnly: true
          type: string
        fee:
          description: |
            The fee attributable to this refund for display. When stored per-refund it is returned as-is; otherwise it is the proportional share of the payment fee (full payment fee for full refunds, else round(payment fee × refund amount / payment amount)).
          readOnly: true
          type: integer
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        internal_notes:
          description: Free form notes concerning this refund that are only visible
            to clients.
          maxLength: 65535
          type: string
        local_created_at:
          description: Moment when the refund occurred in the timezone set for the
            Organization.
          format: date-time
          readOnly: true
          type: string
        net:
          description: The net amount of funds transferred for the payment in whole
            units of the smallest unit of measure for the specified currency.
          type: integer
        public_notes:
          description: Free form notes concerning this refund that are sent to the
            end user.
          maxLength: 65535
          type: string
        reason:
          default: requested_by_customer
          description: The reason for the refund given by the customer.
          enum:
          - duplicate
          - fraudulent
          - requested_by_customer
          type: string
        updated_at:
          description: Moment when the resource was updated most recently.
          format: date-time
          readOnly: true
          type: string
      type: object
      x-public: true
    RemoteDeposit:
      description: Remote deposit is a process where checks are scanned and processed
        through a payment facilitator's system before being linked to users and funds.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    RemoteDepositItem:
      description: A RemoteDepositItem is a scanned check processed through a payment
        facilitator's system for linking to users and funds.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    RepeatingEvent:
      description: Stores rules and definitions for the generation of repeated Event
        resources.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      required:
      - id
      - app_key
      - title
      - event_title
      type: object
    RepeatingEventUpdate:
      description: Stores rules and definitions for the generation of repeated Event
        resources.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      required:
      - id
      - app_key
      - title
      - event_title
      type: object
    ReportResponse:
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    Schedule:
      description: |
        A schedule represents a recurring donation that is ready to be processed by the Donation Scheduler system.
        This is a simplified model compared to RecurringDonation, containing only the fields needed for processing.
        Schedules are fetched based on their next_process_at timestamp.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
        amount:
          allOf:
          - $ref: '#/components/schemas/Money'
          description: Total amount for this scheduled donation.
        designations:
          $ref: '#/components/schemas/Designations'
      type: object
    SelfLink:
      properties:
        self:
          properties:
            href:
              description: A link to this collection or resource
              format: url
              type: string
          type: object
      type: object
      x-public: true
    SelfLinkPublic:
      properties:
        self:
          $ref: '#/components/schemas/LinkPublic'
      type: object
      x-public: true
    SendAttempt:
      description: |
        An attempt to send a message to a Webhook's endpoint_url corresponding
        to the occurrence of a subscribed event.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    Session:
      description: A Session is a class/room/sub-event belonging to an event with
        the option for check-in.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    SessionUpdate:
      description: A Session is a class/room/sub-event belonging to an event with
        the option for check-in.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    SetupIntent:
      description: |
        This is the response body when creating a Setup Intent
      properties:
        _embedded:
          properties:
            account:
              description: The payment account that's associated with this Setup Intent
              properties:
                id:
                  description: The payment account ID
                  example: e4f74836-915b-8c34-be56-3ab24a138401
                  format: uuid
                  type: string
              readOnly: true
              type: object
            profile:
              description: |
                The profile associated with this Setup Intent. Required for
                guests. See
                https://api-docs.subsplash.net/end-user-auth/#tag/Profile/operation/GetOneProfile
              properties:
                email:
                  description: The email of the profile associated with this Setup
                    Intent. Required for guests.
                  example: t.wambsgans@waystarroycompany.com
                  type: string
                  writeOnly: true
                first_name:
                  description: The first name of the profile associated with this
                    Setup Intent. Required for guests.
                  example: Tom
                  type: string
                  writeOnly: true
                id:
                  description: The ID of the profile
                  example: 97b76855-d1d5-0fc9-d759-08b280f3b230
                  format: uuid
                  readOnly: true
                  type: string
                last_name:
                  description: The last name of the profile associated with this Setup
                    Intent. Required for guests.
                  example: Wambsgans
                  type: string
                  writeOnly: true
              type: object
          required:
          - profile
          type: object
        app_key:
          example: CHURCH
          type: string
        client_secret:
          example: seti_1M1hkgCyNv84EeVk75UONG4n_secret_MlE1DP1lqWwBKNxrIFdYlgBH9tNKQOc
          readOnly: true
          type: string
        created_at:
          description: Moment when the resource was created in UTC.
          format: date-time
          readOnly: true
          type: string
        id:
          example: seti_1M1hkgCyNv84EeVk75UONG4n
          readOnly: true
          type: string
        links:
          $ref: '#/components/schemas/Links'
        verification_token:
          description: The captcha verification token for the Setup Intent. Required
            for guest users; omit for authenticated users.
          type: string
          writeOnly: true
      required:
      - _embedded
      - app_key
      type: object
      x-public: true
    Song:
      description: |
        A Song resource represents an audio file with metadata and images. Songs
        may be associated with an Album.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      type: object
    Submission:
      description: |
        The submission resource represents the successful filling out of a payment form's required information and processing of a payment, and record of the associated information entered by the end user.
      properties:
        _embedded:
          description: Embedded resources.
          properties:
            fund:
              description: |
                The linked fund resource from the form.

                Note that this can be changed during the lifetime of the form which is why it's recorded separately here. The Submission is responsible for recording the Fund at the time of creation rather than the API consumer. See <https://api-docs.subsplash.net/#tag/Fund>
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  type: string
              readOnly: true
              type: object
            instrument:
              description: The instrument used in the payment. See <https://api-docs.subsplash.net/payments/#tag/Instrument>
              properties:
                id:
                  description: Unique identifier for the resource.
                  format: uuid
                  type: string
              type: object
            payment:
              allOf:
              - $ref: '#/components/schemas/Payment'
              description: The related payment for the submission. See <https://api-docs.subsplash.net/#tag/Payment>
            payment-form:
              allOf:
              - $ref: '#/components/schemas/PaymentForm'
              description: The payment form that the submission went through. See
                <https://api-docs.subsplash.net/#tag/PaymentForm>
            responses:
              description: The related responses for the form's submission. See <https://api-docs.subsplash.net/#tag/Response>
              items:
                properties:
                  id:
                    description: Unique identifier for the resource.
                    format: uuid
                    type: string
                type: object
              type: array
          type: object
        _links:
          $ref: '#/components/schemas/Links'
        created_at:
          description: Moment when the resource was created in UTC.
          format: date-time
          readOnly: true
          type: string
        email:
          description: The email address of the user who submitted the submission.
          readOnly: true
          type: string
        first_name:
          description: The first name of the user who submitted the submission.
          readOnly: true
          type: string
        full_name:
          description: The full name of the user who submitted the submission.
          readOnly: true
          type: string
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        last_name:
          description: The last name of the user who submitted the submission.
          readOnly: true
          type: string
        org_key:
          description: The identifier for the owning organization.
          format: /[A-Z0-9]{8}/
          readOnly: true
          type: string
        quantity:
          description: The selected quantity for the submission.
          minimum: 1
          type: integer
        short_id:
          description: A randomly generated integer ID used to identify the submission.
            Also referred to as the Order ID. This value is an unsigned 64-bit integer.
          maxLength: 20
          maximum: 1.8446744073709552e+19
          minLength: 1
          minimum: 0
          readOnly: true
          type: integer
        tax_rate:
          default: 0
          description: |
            The integer value of the taxation rate for the payment in units of thousandths of a percent.

            Note: If the tax_rate is passed during Submission creation, it is compared with what the backend will calculate to validate that the payment won't be charging a different amount from what the submitter is expecting.
          minimum: 0
          type: integer
        unit_amount:
          description: |
            The integer amount charged per unit sold in whole units of the smallest unit of measure for the specified currency.

            Note: If this amount is used during Submission creation, it is compared with what the backend will calculate to validate that the payment won't be charging a different amount from what the submitter is expecting.
          properties:
            currency:
              description: Three-letter ISO currency code, in lowercase. Must be a
                supported currency for the payfac and account.
              maxLength: 3
              type: string
            value:
              description: The integer amount to be used for the payment per unit
                in whole units of the smallest unit of measure for the specified currency.
              type: integer
          type: object
      type: object
      x-public: true
    Terminal:
      description: |
        A Terminal is a set of configurations and options used to handle payments from end-users. This resource does not include domain specific (i.e wallet/giving/donations) data. Clients of the payments service may choose to "extend" a Terminal resource in order to add additional information. The currency that the terminal accepts is the default currency of the account. The terminal is not responsible for the sending of receipts, but can provide information used in the receipts.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
      required:
      - name
      - statement_descriptor
      type: object
    Timezone:
      properties:
        id:
          description: The id of the timezone
          type: integer
        name:
          description: The name of the timezone. For ex. "America/New_York"
          type: string
      type: object
      x-public: true
    Token:
      properties:
        access_token:
          description: The access token a client can use to call Subsplash APIs
          type: string
        expires_in:
          description: The number of seconds before the returned acces_token expires
          type: integer
        token_type:
          description: The type of token
          type: string
      readOnly: true
      type: object
      x-public: true
    TokenForm:
      properties:
        add_claims:
          description: |
            A JSON string containing a claims object to be included in the token.
            This set of claims will be merged with the standard claims for the client.
            This may only be specified if the API Client's can_define_scope is true.
            Otherwise, an error will be returned.
          format: json
          type: string
        add_headers:
          description: |
            A JSON string containing a header object to be included in the
            token. This set of headers will be merged with the standard headers
            for the token. This may only be specified if the API Client's
            can_define_scope is true. Otherwise, an error will be returned.
          format: json
          type: string
        claims:
          description: |
            A JSON string containing a claims object to be included in the token.
            This may only be specified if the API Client's can_define_scope is true.
            Otherwise, an error will be returned.
          format: json
          type: string
        client_id:
          description: The clients personal ID
          type: string
        client_secret:
          description: The clients personal secret
          type: string
        grant_type:
          default: client_credentials
          description: The grant_type of the token request
          type: string
      required:
      - grant_type
      - client_id
      - client_secret
      type: object
      x-public: true
    TokenResponse:
      description: |
        A TokenResponse is an entity used by end-user-auth to exchange token information.
      properties:
        access_token:
          description: Valid access token.
          type: string
        sap_token:
          description: Valid SAP (Subsplash App) token.
          type: string
        success:
          description: Confirms if the token exchange was successful.
          type: boolean
        token_type:
          description: The type of token.
          type: string
      type: object
      x-public: true
    Topic:
      description: A Topic represents a group of users that is used with push notifications.
      properties:
        _embedded:
          $ref: '#/components/schemas/TopicEmbedded'
        _links:
          $ref: '#/components/schemas/SelfLinkPublic'
        app_key:
          description: Six character app code
          pattern: ^[A-Z0-9]{6}$
          type: string
        aws_sns_topic_arn:
          description: Topic Amazon Resource Name
          type: string
        created_at:
          description: Moment when the topic was created
          format: date-time
          type: string
        deactivated_at:
          description: Moment when the topic was deactivated
          format: date-time
          type: string
        deleted_at:
          description: Moment when the topic was deleted
          format: date-time
          type: string
        id:
          description: Unique identifier of topic object
          format: uuid
          type: string
        is_general:
          description: Indicates whether the topic is general (vs specific)
          type: boolean
        is_private:
          description: Indicates whether the topic private (vs public)
          type: boolean
        num_subscribers:
          description: The number of subscriptions on this topic
          type: integer
        title:
          description: The title of the topic
          type: string
        updated_at:
          description: Moment when the topic was updated
          format: date-time
          type: string
      type: object
      x-public: true
    TopicEmbedded:
      description: Embedded properties of the topic
      properties:
        Notifications:
          items:
            $ref: '#/components/schemas/Notification'
          type: array
      type: object
      x-public: true
    TopicSubscription:
      description: |
        TopicSubscription is a representation of a subscription between a user's PlatformEndpoint and a Topic.  In this case,
        a user's PlatformEndpoint is supplied directly.
      properties:
        _embedded:
          description: Embedded properties of topic subscription.
          properties:
            platform-endpoint:
              $ref: '#/components/schemas/PlatformEndpoint'
            topic:
              $ref: '#/components/schemas/Topic'
          type: object
        _links:
          $ref: '#/components/schemas/SelfLinkPublic'
        app_key:
          description: Six character app code.
          pattern: ^[A-Z0-9]{6}$
          type: string
        aws_sns_subscription_arn:
          description: Topic Subscription Amazon Resource Name
          type: string
        created_at:
          description: Moment when the topic subscription was created.
          format: date-time
          type: string
        deleted_at:
          description: Moment when the topic subscription was deleted.
          format: date-time
          type: string
        id:
          description: Unique identifier of topic subscription object.
          format: uuid
          type: string
        updated_at:
          description: Moment when the topic subscription was updated.
          format: date-time
          type: string
      type: object
      x-public: true
    Transfer:
      description: Represents a transfer (payout) that donations/payments may belong
        to.
      properties:
        created_at:
          description: Moment when the transfer was created in UTC.
          format: date-time
          type: string
        id:
          description: The unique identifier for this transfer.
          example: ec194b59-9fe2-4a2e-8c1d-91d0c32f8e5c
          format: uuid
          type: string
        short_id:
          description: A more human friendly, short, unique, integer id for the Transfer.
          example: 12345
          type: integer
      type: object
      x-public: true
    TypeBitSet:
      items:
        type: string
      type: array
      x-public: true
    UUID:
      description: A UUID.
      example: 123e4567-e89b-12d3-a456-426655440000
      format: uuid
      type: string
      x-public: true
    UpdatedByUser:
      description: |
        Information about the type and UUID of the entity performing the update. Note that only a service can set this data directly on a request.
        Otherwise, this data is derived from token claims.
      properties:
        type:
          description: |
            The type for the entity performing the update. Allowed values are: `user.end-user-auth`, `user.accounts` or `service.{service_name}`.
          type: string
        uuid:
          description: |
            The id for the entity performing the update. It can represent an Accounts User, an End User or a Service.
          format: uuid
          type: string
      type: object
      x-public: true
    UpdatedByUserInput:
      description: |
        Information about the type and UUID of the entity performing the update. Note that only a service can set this data directly on a request.
        Otherwise, this data is derived from token claims.
      properties:
        type:
          description: The type for the entity performing the update.
          enum:
          - user.end-user-auth
          - user.accounts
          type: string
        uuid:
          description: |
            The id for the entity performing the update. It can represent an Accounts User, an End User or a Service.
          format: uuid
          type: string
      type: object
      x-public: true
    Webhook:
      description: |
        A Webhook represents an endpoint that receives messages corresponding to
        one or more Events.
      properties:
        _links:
          $ref: '#/components/schemas/Links'
        created_at:
          description: Moment when the resource was created.
          format: date-time
          readOnly: true
          type: string
        enabled:
          default: false
          description: |
            Whether messages should be sent to the endpoint. To set this to `true`,
            a valid `endpoint_url` and at least one event must be set.
          type: boolean
        endpoint_url:
          description: The https endpoint to subscribe.
          format: url
          type: string
        events:
          description: |
            The events for which the endpoint should be sent messages. Each value
            must correspond to the `name` of an [Event](#tag/Event).
          example:
          - profile.create
          - profile.update
          items:
            type: string
          minItems: 1
          type: array
        id:
          description: Unique identifier for the resource.
          format: uuid
          readOnly: true
          type: string
        org_key:
          description: ID of the organization to which the resource belongs.
          pattern: /^\w{8}$/
          type: string
        secret:
          description: |
            Secret used to sign webhook.
            TODO: link to docs for verifying messages.
          readOnly: true
          type: string
        updated_at:
          description: Moment when the resource was updated.
          format: date-time
          readOnly: true
          type: string
      required:
      - org_key
      - events
      - endpoint_url
      type: object
      x-public: true
    academic_grade:
      $ref: '#/components/schemas/AcademicGrade'
    created_source:
      $ref: '#/components/schemas/CreatedSource'
    graduation_year:
      $ref: '#/components/schemas/GraduationYear'
    household_role:
      $ref: '#/components/schemas/HouseholdRole'
    latest-membership-status-change:
      allOf:
      - $ref: '#/components/schemas/LatestMembershipStatusChange'
      description: |
        The latest membership status change resource connected to the profile.
      x-public: true
    marital_status:
      $ref: '#/components/schemas/ProfileMaritalStatus'
    phone_number:
      $ref: '#/components/schemas/PhoneNumberWithCountryCode'
    status:
      $ref: '#/components/schemas/ProfileStatus'
    updated_by_user:
      $ref: '#/components/schemas/UpdatedByUser'
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: A valid token must be used with each request.
      scheme: bearer
      type: http
info:
  contact:
    email: api@subsplash.com
  description: The Subsplash API provides programmatic access to the Subsplash Platform.
  title: Subsplash API
  version: 1.0.0
openapi: 3.0.2
paths:
  /builder/v1/list-rows:
    get:
      description: |
        To retrieve list rows for a saved 'standard' or 'dynamic' list, filter[source_list] can be used.

        To preview list rows for a dynamic list, filter[app_key] and filter[type] can be used along
        with additional filters.
      operationId: ListListRows
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      list-rows:
                        items:
                          $ref: '#/components/schemas/ListRow'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/CollectionLinks'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: bad input parameter
      summary: List ListRows
      tags:
      - ListRow
    post:
      description: Creates a new ListRow for a 'standard' list only
      operationId: CreateListRow
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListRow'
        description: ListRow to create (standard)
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ListRow'
          description: ListRow successfully created
        "400":
          description: invalid input, object invalid
      summary: Create a ListRow
      tags:
      - ListRow
    x-public: true
  /builder/v1/lists:
    get:
      operationId: ListLists
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      lists:
                        items:
                          $ref: '#/components/schemas/ListRes'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/CollectionLinks'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: bad input parameter
      summary: List Lists
      tags:
      - List
    post:
      description: Creates a new List
      operationId: CreateList
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListCreateReq'
        description: List to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ListRes'
          description: List successfully created
        "400":
          description: invalid input, object invalid
      summary: Create a List
      tags:
      - List
    x-public: true
  /builder/v1/lists-rows/{id}:
    delete:
      description: Deletes a ListRow for a 'standard' list only
      operationId: DeleteListRow
      responses:
        "204":
          description: ListRow successfully deleted
        "400":
          description: invalid input, object invalid
      summary: Delete a ListRow
      tags:
      - ListRow
    get:
      operationId: GetOneListRow
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ListRow'
          description: OK
      summary: Get One ListRow
      tags:
      - ListRow
    parameters:
    - description: The ID of the resource to get
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    patch:
      description: Updates a ListRow for a 'standard' list only
      operationId: UpdateListRow
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListRow'
        description: Resource to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ListRow'
          description: ListRow successfully updated
        "400":
          description: invalid input, object invalid
      summary: Update a ListRow
      tags:
      - ListRow
    x-public: true
  /builder/v1/lists/{id}:
    delete:
      operationId: DeleteList
      responses:
        "204":
          description: list successfully deleted
        "400":
          description: invalid input, object invalid
      summary: Delete a List
      tags:
      - List
    get:
      operationId: GetOneList
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ListRes'
          description: OK
      summary: Get One List
      tags:
      - List
    parameters:
    - description: The ID of the resource to get
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    patch:
      description: |
        Note that this API is a little different than most
        in that it supports updates/creates for embedded list row resources.
        It's important to note that the logic enforces list row positional
        ordering such that if a new list row is inserted or moved, that it
        may result in updates to other list row resources belonging to the
        list, but not present in the patch request. It's recommended that
        after a PATCH succeeds, the client refresh all list row items via the
        List ListRow API in order to ensure no stale data is returned.
      operationId: UpdateList
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListRes'
        description: Resource to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ListRes'
          description: List successfully updated
        "400":
          description: invalid input, object invalid
      summary: Update a List
      tags:
      - List
    x-public: true
  /bulk-topic-subscriptions:
    post:
      description: Creates the Topic Subscription (in the request body) by External
        User. An External User can resolve to multiple platform endpoints.
      operationId: CreateBulkTopicSubscription
      requestBody:
        content:
          application/hal+json:
            schema:
              $ref: '#/components/schemas/BulkTopicSubscription'
        description: Supply the Bulk Topic Subscription to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                items:
                  $ref: '#/components/schemas/TopicSubscription'
                type: array
          description: Bulk Topic Subscription successfully created
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Create Bulk Topic Subscription
      tags:
      - TopicSubscription
    x-public: true
  /campaigns:
    get:
      description: Retrieves a list of campaigns based on the provided filters and
        pagination parameters.
      operationId: GetAllCampaigns
      parameters:
      - description: eight character org code.
        in: query
        name: filter[org_key]
        required: true
        schema:
          pattern: ^[A-Z0-9]{8}$
          type: string
      - description: Filter by campaign title.
        in: query
        name: filter[title]
        schema:
          example: Building Campaign
          type: string
      - description: The ID of a desired campaign
        in: query
        name: filter[campaign.id]
        schema:
          format: uuid
          type: string
      - description: |
          Earliest campaign start date to filter campaigns by where start_date is a valid RFC3339 date. Supports the `=` operator.
          e.g. `?filter[start_date.min]=1996-12-19T16:39:57-08:00` will campaigns with start dates after this date.
        in: query
        name: filter[start_date.min]
        schema:
          format: date-time
          type: string
      - description: |
          Latest campaign start date to filter campaigns by where start_date is a valid RFC3339 date. Supports the `=` operator.
          e.g. `?filter[start_date.max]=1996-12-19T16:39:57-08:00` will campaigns with start dates before this date.
        in: query
        name: filter[start_date.max]
        schema:
          format: date-time
          type: string
      - description: |
          Earliest campaign end date to filter campaigns by where end_date is a valid RFC3339 date. Supports the `=` operator.
          e.g. `?filter[end_date.min]=1996-12-19T16:39:57-08:00` will campaigns with end dates after this date.
        in: query
        name: filter[end_date.min]
        schema:
          format: date-time
          type: string
      - description: |
          Latest campaign end date to filter campaigns by where end_date is a valid RFC3339 date. Supports the `=` operator.
          e.g. `?filter[end_date.max]=1996-12-19T16:39:57-08:00` will campaigns with end dates before this date.
        in: query
        name: filter[end_date.max]
        schema:
          format: date-time
          type: string
      - description: the current state of a campaign. Can support multiple state filters
          i.e. filter[state]=active,done
        in: query
        name: filter[state]
        schema:
          enum:
          - draft
          - scheduled
          - active
          - done
          type: string
      - description: Fields to sort on.
        in: query
        name: sort
        schema:
          anyOf:
          - enum:
            - created_at
            - -created_at
            - updated_at
            - -updated_at
            - start_date
            - -start_date
            - end_date
            - -end_date
            type: string
          type: string
      - description: The resources to include on the campaign.
        in: query
        name: include
        schema:
          items:
            enum:
            - funds
            type: string
          type: array
      - description: The page number to retrieve.
        in: query
        name: page[number]
        schema:
          minimum: 0
          type: integer
      - description: Maximum number of records to return.
        in: query
        name: page[size]
        schema:
          maximum: 100
          minimum: 0
          type: integer
      - description: |
          Determines whether the `total` field is included in the collection resource.
        in: header
        name: Collection-Total
        schema:
          default: omit
          enum:
          - include
          - omit
          type: string
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginationProperties'
                - properties:
                    _embedded:
                      properties:
                        campaigns:
                          items:
                            $ref: '#/components/schemas/Campaign'
                          type: array
                      type: object
                    _links:
                      $ref: '#/components/schemas/CollectionLinks'
                  type: object
          description: Search results matching criteria.
      summary: List Campaigns
      tags:
      - Campaign
      x-public: true
  /campaigns/{id}:
    get:
      description: Retrieves detailed information about a specific campaign by its
        ID.
      operationId: GetOneCampaign
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Campaign'
          description: OK
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Campaign
      tags:
      - Campaign
      x-public: true
    parameters:
    - description: The ID of the campaign to get.
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    - description: The resources to include on the campaign.
      in: query
      name: include
      schema:
        items:
          enum:
          - fund
          type: string
        type: array
  /campaigns/{id}/contributions:
    get:
      description: Retrieves a list of contributions for a specific campaign.
      operationId: GetOneCampaignContributions
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      contributions:
                        items:
                          $ref: '#/components/schemas/CampaignContribution'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/Links'
                  campaign_info:
                    $ref: '#/components/schemas/CampaignInfo'
                  count:
                    description: Number of contributions on current page.
                    example: 1
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of pledges for the campaign, regardless
                      of filters.
                    example: 1
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
            text/csv:
              schema:
                example: |
                  first_name,last_name,email,phone,street_1,street_2,city,state,zip,pledged_amount,gross_given,net_given,fees,percent_complete,active_recurring,recurring_frequency,gift_count
                  Cloud,Strife,bustersword@shinra.gov,+12535555555,123 Paper st,Earth,WA,99999,$1000,$500,$500,$0,50%,true,Weekly on Tuesdays,5
                type: string
          description: OK
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Campaign's Contributions
      tags:
      - CampaignContributions
      x-public: true
    parameters:
    - description: The ID of the campaign contributions to get.
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    - description: Eight character org code.
      example: SUBSPLSH
      in: query
      name: filter[org_key]
      required: true
      schema:
        pattern: ^[A-Z0-9]{8}$
        type: string
    - description: ID of the end-user to filter embedded contributions by.
      example: dcba4389-0d59-4ee4-8045-85d40ed58c35
      in: query
      name: filter[end-user.id]
      schema:
        format: uuid
        type: string
    - description: |
        Search term to filter pledges by first and last name of the donor. Supports the `=` operator.
      example: John
      in: query
      name: filter[search]
      schema:
        type: string
    - description: The Accept request HTTP header indicates which content types, expressed
        as MIME types, the client is able to understand.
      in: header
      name: Accept
      schema:
        default: application/hal+json
        enum:
        - text/csv
        - application/hal+json
        type: string
  /donations:
    get:
      description: Retrieves a list of donations based on the provided filters and
        pagination parameters.
      operationId: GetAllDonations
      parameters:
      - description: ID of the donations to filter by.
        example: ddd37fb3-8565-414f-8256-90d360643eff
        in: query
        name: filter[id]
        schema:
          format: uuid
          type: string
      - description: Eight character org code. Supports one or a list of org keys.
        example: SUBSPLSH
        in: query
        name: filter[org_key]
        schema:
          pattern: ^[A-Z0-9]{8}$
          type: string
      - description: ID of the batch to filter donations by. When this filter is present,
          all donations will be returned including ones marked "hidden" from the UI
          with the `b` flag.
        example: 09cf5cec-c218-45a0-8eac-835824053dcf
        in: query
        name: filter[batch.id]
        schema:
          format: uuid
          type: string
      - description: ID of the end-user to filter donations by. Supports one or a
          list of UUIDs.
        example: dcba4389-0d59-4ee4-8045-85d40ed58c35
        in: query
        name: filter[end-user.id]
        schema:
          format: uuid
          type: string
      - description: |
          ID of the fund or subfund to filter donations by. Supports a single UUID or a collection of uuids.
          `=` and `!=` operations are the only operators supported.
          e.g. `?filter[fund.id]=!8bf8a196-730a-4087-af92-84a80af25618,ec16e842-4306-23f1-6b20-b606e51a2167` would
          filter out donations that belong to the two above funds or subfunds.
        example: 8bf8a196-730a-4087-af92-84a80af25618
        in: query
        name: filter[fund.id]
        schema:
          format: uuid
          type: string
      - description: An alternative way to include donations marked "hidden". This
          is useful for getting the whole set of donations for an end-user without
          having to know batch ids. If you want hidden, and non-hidden, make a request
          that looks something like (?include[hidden]=true,false)
        example: true
        in: query
        name: filter[hidden]
        schema:
          type: boolean
      - description: Status to filter donations by. Supports a single status or a
          collection of statuses using the `=` and `!=` operators.
        in: query
        name: filter[status]
        schema:
          enum:
          - refunded
          - transfer pending
          - transfer_pending
          - paid
          - batched
          - failed
          - disputed
          - pending
          - deleted
          type: string
      - description: Include or exclude refunded donations. Since a gift can be paid,
          and then refunded, including just a paid status filter may also include
          refunded gifts.
        in: query
        name: filter[refunded]
        schema:
          type: boolean
      - $ref: '#/components/parameters/FilterAuthDate'
      - $ref: '#/components/parameters/FilterAuthDateMin'
      - $ref: '#/components/parameters/FilterAuthDateMax'
      - $ref: '#/components/parameters/FilterUpdatedAt'
      - $ref: '#/components/parameters/FilterUpdatedAtMin'
      - $ref: '#/components/parameters/FilterUpdatedAtMax'
      - description: |
          Campus UUID to filter by. Supports a single UUID or a collection of uuids. `=` and `!=` operations are the only operators supported.
          e.g. `?filter[campus.id]=:id1,:id2` will return Donations that belong to campuses of `:id1`, and `:id2`.
          `?filter[campus.id]=!:id1,:id2` will return Donations that belong to every campus except those that belong to campus `:id1`, and `:id2`.
          Also, an explicit value of `null` is supported for returning donations without a campus.
        in: query
        name: filter[campus.id]
        schema:
          format: uuid
          type: string
      - description: |
          Amount to filter donations by. Supports a single int value in pennies. Supports `=`, `>`,`<`, and `!=` operators.
            e.g. `?filter[amount]=>100` will return Donations with amounts greater than or equal to $1.00
        example: 4242
        in: query
        name: filter[amount]
        schema:
          type: integer
      - description: |
          Minimum amount to filter donations by. Supports a single int value in pennies. Supports `=` operator.
            e.g. `?filter[amount.min]=100` will return Donations with amounts greater than or equal to $1.00
        example: 100
        in: query
        name: filter[amount.min]
        schema:
          type: integer
      - description: |
          Maximum amount to filter donations by. Supports a single int value in pennies. Supports `=` operator.
            e.g. `?filter[amount.max]=200` will return Donations with amounts less than or equal to $2.00
        example: 200
        in: query
        name: filter[amount.max]
        schema:
          type: integer
      - description: |
          Filter donations by their associated recurring id
        in: query
        name: filter[recurring.id]
        schema:
          format: uuid
          type: string
      - description: |
          Filter donations by their associated transfer ID. Supports a single UUID or a collection of UUIDs using the `=` and `!=` operators.
          Also supports `=null` and `=!null` to filter donations that have or have not been paid out.
          e.g. `?filter[transfer.id]=8bf8a196-730a-4087-af92-84a80af25618` will return donations with the specified transfer ID.
          `?filter[transfer.id]=!8bf8a196-730a-4087-af92-84a80af25618` will return donations without the specified transfer ID.
          `?filter[transfer.id]=null` will return donations that have not been paid out (no transfer ID).
          `?filter[transfer.id]=!null` will return donations that have been paid out (have a transfer ID).
        example: 8bf8a196-730a-4087-af92-84a80af25618
        in: query
        name: filter[transfer.id]
        schema:
          format: uuid
          type: string
      - description: |
          Instrument type to filter donations by. Supports a single type, or a collection of types, using the following operators: `=`, `=!`.
          e.g. `?filter[instrument.type]=Visa,MasterCard` will return Donations that have a `Visa` or `MasterCard`
          `?filter[instrument.type]=!Visa,MasterCard` will return Donations that don't have `Visa` or `MasterCard` instrument types.
          Note: if the special keyword `card` is passed in, it will expand into all of the card types automatically
        example: American Express
        in: query
        name: filter[instrument.type]
        schema:
          anyOf:
          - enum:
            - Cash
            - Check
            - Other
            - ACH
            - Visa
            - American Express
            - MasterCard
            - Discover
            - JCB
            - Diners Club
            - Card
            - DAF
            - QCD
            - Cash equivalent
            - In kind
            - Other Non-Trad
            type: string
          type: string
      - description: Frequency to filter donations by. Supports the `=` operator with
          a single value.
        in: query
        name: filter[frequency]
        schema:
          anyOf:
          - enum:
            - one-time
            - recurring
            type: string
          type: string
      - description: |
          Search term to filter donations by. Supports the `=` operator. Will search funds, causes, campuses, batches,
          and everything in the people search API. See https://api.docs.subsplash.net/search/#operation/Search
        example: Frank
        in: query
        name: filter[search]
        schema:
          type: string
      - description: Fields to sort a list of Donations on.
        example: auth_date
        in: query
        name: sort
        schema:
          anyOf:
          - enum:
            - id
            - -id
            - auth_date
            - -auth_date
            - created_at
            - -created_at
            - updated_at
            - -updated_at
            - amount
            - -amount
            - sequence_number
            - -sequence_number
            type: string
          type: string
      - description: The resources to include on the donation.
        in: query
        name: include
        schema:
          items:
            enum:
            - profile
            - funds
            - campuses
            type: string
          type: array
      - description: The page number to retrieve.
        example: 1
        in: query
        name: page[number]
        schema:
          minimum: 0
          type: integer
      - description: Maximum number of records to return.
        example: 20
        in: query
        name: page[size]
        schema:
          maximum: 100
          minimum: 0
          type: integer
      - description: |
          Determines whether the `total` field is included in the collection resource.
        in: header
        name: Collection-Total
        schema:
          default: include
          enum:
          - include
          type: string
      - description: See "Collection-Stats" schema below. | Determines whether to
          include donation statistics such as earliest_donation, latest_donation,
          average_donation, etc. Any passed in filters will apply to these stats.
        in: header
        name: Collection-Stats
        schema:
          default: include
          enum:
          - include
          type: string
      - description: The Accept request HTTP header indicates which content types,
          expressed as MIME types, the client is able to understand.
        in: header
        name: Accept
        schema:
          default: application/hal+json
          enum:
          - application/hal+json
          - text/csv
          type: string
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginationProperties'
                - properties:
                    _embedded:
                      properties:
                        donations:
                          items:
                            $ref: '#/components/schemas/DonationResponse'
                          type: array
                      type: object
                    _links:
                      $ref: '#/components/schemas/CollectionLinks'
                    stats:
                      $ref: '#/components/schemas/Collection-Stats'
                  type: object
            text/csv:
              schema:
                example: |
                  auth_date,first_name,last_name,email,donor_id,member_id,campus,fund,subfund,payment_method,check_number,gift_id,status,gross_amount,fee,net_amount,donor_covered_fee,frequency,memo,batch_name,adjusted,transfer_id,transfer_date
                  2020-12-12 11:02:16 -0800 PST,Ted,Logan,ted.t.logan@wyldstallyns.band,12343,id332,North Campus,San Dimas High School,Football,Visa,,3231223,batched,$100,$100,$1,$99,yes,,For the kids,,no,443212,2020-12-12
                type: string
          description: Search results matching criteria.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Donations
      tags:
      - Donation
      x-public: true
  /donations/{id}:
    get:
      description: Retrieves detailed information about a specific donation by its
        ID.
      operationId: GetOneDonation
      parameters:
      - description: The ID of the donation.
        in: path
        name: id
        required: true
        schema:
          format: uuid
          type: string
      - description: The resources to include on the donation.
        in: query
        name: include
        schema:
          items:
            enum:
            - profile
            - adjustments
            - funds
            - campuses
            - instrument
            type: string
          type: array
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/DonationResponse'
          description: OK
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get a Donation
      tags:
      - Donation
      x-public: true
  /events/v2/calendars:
    get:
      description: Fetches Calendars according to search params
      operationId: ListCalendarsV2
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      calendars:
                        items:
                          $ref: '#/components/schemas/Calendar'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/Links'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Calendars
      tags:
      - Calendar
    post:
      description: Adds a new Calendar
      operationId: CreateCalendar
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Calendar'
        description: Calendar to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Calendar'
          description: Calendar successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a Calendar
      tags:
      - Calendar
    x-public: true
  /events/v2/calendars/{id}:
    delete:
      description: Deletes an existing Calendar
      operationId: DeleteCalendar
      responses:
        "204":
          description: Calendar successfully deleted
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Delete a Calendar
      tags:
      - Calendar
    get:
      description: Fetches an existing Event
      operationId: GetOneCalendar
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Calendar'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Calendar
      tags:
      - Calendar
    parameters:
    - description: The ID of the Calendar to get
      in: path
      name: id
      required: true
      schema:
        type: string
    patch:
      description: Updates an existing Calendar
      operationId: UpdateCalendar
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Calendar'
        description: Calendar to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Calendar'
          description: Calendar successfully updated
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Update a Calendar
      tags:
      - Calendar
    x-public: true
  /events/v2/events:
    get:
      description: Fetches Events according to search params
      operationId: ListEventsV2
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      events:
                        items:
                          $ref: '#/components/schemas/Event'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/Links'
                  count:
                    type: integer
                  total:
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: bad input parameter
      summary: List Events
      tags:
      - Event
      x-subsplash-sdk:
        generateTotal: true
    post:
      description: |
        Adds a new Event. If the new event is part of a calendar with images and
        the provided event does not include any images, the calendar's images
        will be applied to the event.

        If RepeatingEvent embedded on Event, next instance in repeating series will
        be created. All fields will be populated by RepeatingEvent values and any
        Event values included in request will be ignored, except the start_at value.
        If a specific start_at value provided with RepeatingEvent embed, Event instance
        will be created if instance does not already exist.

        app_key required
      operationId: CreateEvent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Event'
        description: Event to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Event'
          description: Event successfully created
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Invalid input, object invalid
      summary: Create an Event
      tags:
      - Event
    x-public: true
  /events/v2/events/{id}:
    delete:
      description: Deletes an existing Event
      operationId: DeleteEvent
      responses:
        "204":
          description: Event successfully deleted
        "404":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Not found
      summary: Delete an Event
      tags:
      - Event
    get:
      description: Fetches existing Event
      operationId: GetOneEvent
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Event'
          description: OK.
        "404":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Not found.
      summary: Get one Event
      tags:
      - Event
    parameters:
    - description: the Event ID to fetch
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    patch:
      description: Updates an existing Event
      operationId: UpdateEvent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Event'
        description: Event properties to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Event'
          description: Event successfully updated
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: bad input parameter
        "404":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Event not found
      summary: Update an Event
      tags:
      - Event
    x-public: true
  /events/v2/repeating-events:
    get:
      description: Fetches RepeatingEvents according to search params
      operationId: ListRepeatingEvents
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      repeating-events:
                        items:
                          $ref: '#/components/schemas/RepeatingEvent'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/Link'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List RepeatingEvents
      tags:
      - RepeatingEvent
    post:
      description: Adds a new RepeatingEvent
      operationId: CreateRepeatingEvent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RepeatingEvent'
        description: RepeatingEvent to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/RepeatingEvent'
          description: RepeatingEvent successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a RepeatingEvent
      tags:
      - RepeatingEvent
    x-public: true
  /events/v2/repeating-events/{id}:
    delete:
      description: Deletes existing RepeatingEvent
      operationId: DeleteRepeatingEvent
      responses:
        "204":
          description: RepeatingEvent successfully deleted
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Delete a RepeatingEvent
      tags:
      - RepeatingEvent
    get:
      description: Fetches existing RepeatingEvent
      operationId: GetOneRepeatingEvent
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/RepeatingEvent'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one RepeatingEvent
      tags:
      - RepeatingEvent
    parameters:
    - description: The ID of the RepeatingEvent to get
      in: path
      name: id
      required: true
      schema:
        type: string
    patch:
      description: Updates existing RepeatingEvent
      operationId: UpdateRepeatingEvent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RepeatingEventUpdate'
        description: RepeatingEvent to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/RepeatingEvent'
          description: RepeatingEvent successfully updated
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Update a RepeatingEvent
      tags:
      - RepeatingEvent
    x-public: true
  /funds:
    get:
      description: Retrieves a list of funds based on the provided filters and pagination
        parameters.
      operationId: GetAllFunds
      parameters:
      - description: Filter by fund name.
        in: query
        name: filter[name]
        schema:
          example: General
          type: string
      - description: Eight character org code
        in: query
        name: filter[org_key]
        required: true
        schema:
          pattern: ^[A-Z0-9]{8}$
          type: string
      - description: the page number to retrieve
        in: query
        name: page[number]
        schema:
          minimum: 0
          type: integer
      - description: maximum number of records to return
        in: query
        name: page[size]
        schema:
          maximum: 100
          minimum: 0
          type: integer
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginationProperties'
                - properties:
                    _embedded:
                      properties:
                        funds:
                          items:
                            $ref: '#/components/schemas/Fund'
                          type: array
                      type: object
                    _links:
                      $ref: '#/components/schemas/CollectionLinks'
                  type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Funds
      tags:
      - Fund
      x-public: true
    post:
      description: Creates a new fund with the provided information.
      operationId: CreateFund
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FundCreateRequest'
        description: Information needed to create a fund.
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Fund'
          description: Fund successfully created.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "422":
          $ref: '#/components/responses/UnprocessableEntity'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a Fund
      tags:
      - Fund
      x-public: true
  /funds/{id}:
    get:
      description: Retrieves detailed information about a specific fund by its ID.
      operationId: GetOneFund
      parameters:
      - description: The ID of the fund to be retrieved.
        in: path
        name: id
        required: true
        schema:
          format: uuid
          type: string
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Fund'
          description: Fund successfully retrieved.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Fund
      tags:
      - Fund
      x-public: true
    patch:
      description: Updates an existing fund with the provided information.
      operationId: UpdateOneFund
      parameters:
      - description: The ID of the resource to be retrieved.
        in: path
        name: id
        required: true
        schema:
          format: uuid
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FundUpdateRequest'
        description: Information needed to update a fund.
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Fund'
          description: Fund successfully updated.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Update one Fund
      tags:
      - Fund
      x-public: true
  /groups/v1/group-members:
    get:
      description: |
        This endpoint lists GroupMembers belonging to a particular group(s).
      operationId: ListGroupMembers
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      group-members:
                        items:
                          $ref: '#/components/schemas/GroupMember'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/CollectionLinks'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List GroupMembers
      tags:
      - GroupMember
    post:
      description: Adds a new GroupMember. Note that first_name and last_name are
        automatically pulled from the profile associated with the end_user.
      operationId: CreateGroupMember
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GroupMember'
        description: GroupMember to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/GroupMember'
          description: GroupMember successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a GroupMember
      tags:
      - GroupMember
    x-public: true
  /groups/v1/group-members/{id}:
    delete:
      description: Deletes the GroupMember associated with the provided id.
      operationId: DeleteGroupMember
      responses:
        "204":
          description: GroupMember successfully deleted
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Delete a GroupMember
      tags:
      - GroupMember
    get:
      description: Gets the GroupMember associated with the provided id
      operationId: GetOneGroupMember
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/GroupMember'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one GroupMember
      tags:
      - GroupMember
    parameters:
    - description: The ID of the GroupMember to get
      in: path
      name: id
      required: true
      schema:
        type: string
    patch:
      description: Updates the GroupMember associated with the provide id.
      operationId: UpdateGroupMember
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GroupMember'
        description: GroupMember to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/GroupMember'
          description: GroupMember successfully updated
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Update a GroupMember
      tags:
      - GroupMember
    x-public: true
  /groups/v1/group-types:
    get:
      description: |
        This endpoint lists all default GroupTypes and also the ones attached to the app_key in the auth_token.
      operationId: ListGroupTypes
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      group-members:
                        items:
                          $ref: '#/components/schemas/GroupType'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/CollectionLinks'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List GroupTypes
      tags:
      - GroupType
    post:
      description: Adds a new GroupType
      operationId: CreateGroupType
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GroupType'
        description: GroupType to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/GroupType'
          description: GroupType successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a GroupType
      tags:
      - GroupType
    x-public: true
  /groups/v1/group-types/{id}:
    delete:
      description: Deletes the GroupType associated with the provided id and the Group(s)
        associated with the provided GroupType id should be detached.
      operationId: DeleteGroupType
      responses:
        "204":
          description: GroupType successfully deleted
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Delete a GroupType
      tags:
      - GroupType
    get:
      description: Gets the GroupType associated with the provided id
      operationId: GetOneGroupType
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/GroupType'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one GroupType
      tags:
      - GroupType
    parameters:
    - description: The ID of the GroupType to get
      in: path
      name: id
      required: true
      schema:
        type: string
    patch:
      description: Updates the GroupType associated with the provide id.
      operationId: UpdateGroupType
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GroupType'
        description: GroupType to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/GroupType'
          description: GroupType successfully updated
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Update a GroupType
      tags:
      - GroupType
    x-public: true
  /groups/v1/groups:
    get:
      description: |
        This endpoint returns a list of Groups appropriate to the provided filters
      operationId: ListGroups
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      groups:
                        items:
                          $ref: '#/components/schemas/Group'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/CollectionLinks'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Groups
      tags:
      - Group
    post:
      description: Adds a new Group
      operationId: CreateGroup
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Group'
        description: Group to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Group'
          description: Group successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a Group
      tags:
      - Group
    x-public: true
  /groups/v1/groups/{id}:
    delete:
      description: |
        This endpoint delete the group associated with the provided id.
      operationId: DeleteGroup
      responses:
        "204":
          description: Group successfully deleted
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Delete a Group
      tags:
      - Group
    get:
      description: |
        This endpoint returns the Groups designated by the provided id.
      operationId: GetOneGroup
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Group'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Group
      tags:
      - Group
    parameters:
    - description: The ID of the Group to get
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    - description: Resources to include
      in: query
      name: include
      schema:
        anyOf:
        - enum:
          - image
          - type
          - group-members
          - group-members.end-user
          type: string
        type: string
    - description: |
        the member_count field is an optional field that can only be included by way of this query param.
      in: query
      name: fields[group]
      schema:
        anyOf:
        - enum:
          - member_count
          type: string
        type: string
    patch:
      description: |
        This endpoint updates a group based on the provided request JSON body.
      operationId: UpdateGroup
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Group'
        description: Group to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Group'
          description: Group successfully updated
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Update a Group
      tags:
      - Group
    x-public: true
  /instruments:
    get:
      description: Lists all Instruments
      operationId: ListInstruments
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/Sort'
      - $ref: '#/components/parameters/FilterID'
      - description: |
          App key of instruments to return. Only for use with internal Subsplash
          payment account.
        in: query
        name: filter[app_key]
        schema:
          pattern: /[A-Z0-9]{6}/
          type: string
      - description: |
          An external id to filter instruments by
        in: query
        name: filter[external_id]
        schema:
          type: string
      - description: Filter instruments by end user id
        in: query
        name: filter[end-user.id]
        schema:
          format: uuid
          type: string
      - description: Filter instruments by one-time status
        in: query
        name: filter[one_time]
        schema:
          type: boolean
      - $ref: '#/components/parameters/Fields'
      - description: |
          Specify which embedded resources to include with each resource. See [Includes](https://api-docs.subsplash.net/#tag/Includes) for details.

          Possible options are:
          - `end-user`
        in: query
        name: include
        schema:
          items:
            enum:
            - end-user
            type: string
          type: array
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Collection'
                - properties:
                    _embedded:
                      properties:
                        instruments:
                          items:
                            $ref: '#/components/schemas/Instrument'
                          type: array
                      type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Instruments
      tags:
      - Instrument
      x-public: true
  /instruments/{id}:
    get:
      description: Get One Instrument by ID
      operationId: GetOneInstrument
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Instrument'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Instrument
      tags:
      - Instrument
      x-public: true
    parameters:
    - $ref: '#/components/parameters/UUID'
  /media/v1/media-items:
    get:
      operationId: GetAllMediaItems
      parameters:
      - description: Filter by id
        in: query
        name: filter[id]
        schema:
          format: uuid
          type: string
      - description: Filter by app_key
        in: query
        name: filter[app_key]
        schema:
          type: string
      - description: Filter by title. Allows wildcards (`*`).
        in: query
        name: filter[title]
        schema:
          type: string
      - description: Filter by speaker. Allows wildcards (`*`).
        in: query
        name: filter[speaker]
        schema:
          type: string
      - description: Filter by position
        in: query
        name: filter[position]
        schema:
          type: integer
      - description: Filter by short_code
        in: query
        name: filter[short_code]
        schema:
          type: string
      - description: Filter by video
        in: query
        name: filter[video]
        schema:
          format: uuid
          type: string
      - description: Filter by audio
        in: query
        name: filter[audio]
        schema:
          format: uuid
          type: string
      - description: Filter by web_video_button_url
        in: query
        name: filter[web_video_button_url]
        schema:
          type: string
      - description: Filter by media_series
        in: query
        name: filter[media_series]
        schema:
          format: uuid
          type: string
      - description: Filter by auto_publish
        in: query
        name: filter[auto_publish]
        schema:
          type: boolean
      - description: Filter by status
        in: query
        name: filter[status]
        schema:
          enum:
          - draft
          - scheduled
          - published
          type: string
      - description: Filter by published_at
        in: query
        name: filter[published_at]
        schema:
          format: date-time
          type: string
      - description: Filter by a minimum published_at date
        in: query
        name: filter[published_at.min]
        schema:
          format: date-time
          type: string
      - description: Filter by a maximum published_at date
        in: query
        name: filter[published_at.max]
        schema:
          format: date-time
          type: string
      - description: Filter by created_at
        in: query
        name: filter[created_at]
        schema:
          format: date-time
          type: string
      - description: Filter by a minimum created_at date
        in: query
        name: filter[created_at.min]
        schema:
          format: date-time
          type: string
      - description: Filter by a maximum created_at date
        in: query
        name: filter[created_at.max]
        schema:
          format: date-time
          type: string
      - description: Filter by updated_at
        in: query
        name: filter[updated_at]
        schema:
          format: date-time
          type: string
      - description: Filter by a minimum updated_at date
        in: query
        name: filter[updated_at.min]
        schema:
          format: date-time
          type: string
      - description: Filter by a maximum updated_at date
        in: query
        name: filter[updated_at.max]
        schema:
          format: date-time
          type: string
      - description: Filter by media_series.legacy_series_list_id
        in: query
        name: filter[media_series.legacy_series_list_id]
        schema:
          type: integer
      - description: Filter by legacy_id
        in: query
        name: filter[legacy_id]
        schema:
          type: integer
      - description: Filter by third-party unique identifier.
        in: query
        name: filter[external_id]
        schema:
          type: string
      - description: Include or exclude unlisted resources in results
        in: query
        name: filter[unlisted]
        schema:
          anyOf:
          - enum:
            - include
            - exclude
            type: string
          type: string
      - description: fields to sort on
        in: query
        name: sort
        schema:
          anyOf:
          - enum:
            - published_at
            - -published_at
            type: string
          - enum:
            - created_at
            - -created_at
            type: string
          - enum:
            - updated_at
            - -updated_at
            type: string
          - enum:
            - position
            - -position
            type: string
          - enum:
            - title
            - -title
            type: string
          - enum:
            - date
            - -date
            type: string
          type: string
      - description: the page number to retrieve
        in: query
        name: page[number]
        schema:
          format: int32
          minimum: 0
          type: integer
      - description: maximum number of records to return
        in: query
        name: page[size]
        schema:
          format: int32
          maximum: 100
          minimum: 0
          type: integer
      - $ref: '#/components/parameters/MediaItemIncludes'
      - description: Filter by the attached broadcast resource.
        in: query
        name: filter[broadcast.id]
        schema:
          format: uuid
          type: string
      - description: Filter by the attached broadcast's status. This filter can be
          used without including the broadcast, and maintains proper item pagination
          since the status is cached in the media service. Note that because there
          is no pub-sub event for the never-happened status, some media items could
          incorrectly show a 'scheduled' status, but are actually a 'never-happened'.
        in: query
        name: filter[broadcast.status]
        schema:
          enum:
          - scheduled
          - live
          - ended
          - on-demand
          - never-happened
          type: string
      - description: Filter by the broadcast's start_at field. Implies to query only
          live media items. Supports range filter operators.
        in: query
        name: filter[broadcast.start_at]
        schema:
          type: integer
      - description: Filter by the broadcast's end_at field. Implies to query only
          live media items. Supports range filter operators.
        in: query
        name: filter[broadcast.end_at]
        schema:
          type: integer
      - description: Filter to get the media item associated with the current or next
          broadcast.
        in: query
        name: filter[upcoming_live]
        schema:
          type: boolean
      - description: Filter by the attached live-template resource.
        in: query
        name: filter[live-template.id]
        schema:
          format: uuid
          type: string
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      media-items:
                        items:
                          $ref: '#/components/schemas/MediaItem'
                        type: array
                    type: object
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: bad input parameter
      summary: List MediaItems
      tags:
      - MediaItem
      x-public: true
    post:
      description: Adds a new MediaItem
      operationId: CreateMediaItem
      parameters:
      - $ref: '#/components/parameters/MediaItemIncludes'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/MediaItem'
              - properties:
                  uses_live_vod:
                    default: true
                    description: Indicates if the livestream's VOD has been removed.
                    readOnly: true
                    type: boolean
                type: object
        description: MediaItem to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/MediaItem'
          description: MediaItem successfully created
        "400":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: invalid input, object invalid
      summary: Create a MediaItem
      tags:
      - MediaItem
  /media/v1/media-items/{id}:
    delete:
      operationId: DeleteMediaItem
      responses:
        "204":
          description: MediaItem successfully deleted
        "400":
          description: invalid input, object invalid
      summary: Delete a MediaItem
      tags:
      - MediaItem
    get:
      operationId: GetOneMediaItem
      parameters:
      - $ref: '#/components/parameters/MediaItemIncludes'
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/MediaItem'
          description: OK
      summary: Get one MediaItem
      tags:
      - MediaItem
    parameters:
    - description: The ID of the MediaItem to get
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    patch:
      operationId: UpdateMediaItem
      parameters:
      - $ref: '#/components/parameters/MediaItemIncludes'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/MediaItem'
              - properties:
                  _embedded:
                    properties:
                      live-template:
                        description: |
                          The linked LiveTemplate resource. When creating a media item, it's possible to pass a LiveTemplate ID to reference the LiveTemplate
                          that was used to create this media item.
                          See <https://api.docs.subsplash.net/live/#tag/LiveTemplate>
                        properties:
                          id:
                            description: The unique identifier of the resource
                            format: uuid
                            type: string
                        readOnly: true
                        type: object
                    type: object
                type: object
        description: MediaItem to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/MediaItem'
          description: MediaItem successfully updated
        "400":
          description: invalid input, object invalid
      summary: Update a MediaItem
      tags:
      - MediaItem
    x-public: true
  /media/v1/media-series:
    get:
      operationId: GetAllMediaSeries
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      media-series:
                        items:
                          $ref: '#/components/schemas/MediaSeries'
                        type: array
                    type: object
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: bad input parameter
      summary: List MediaSeries
      tags:
      - MediaSeries
    post:
      description: Adds a new MediaSeries
      operationId: CreateMediaSeries
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MediaSeries'
        description: MediaSeries to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/MediaSeries'
          description: MediaSeries successfully created
        "400":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: invalid input, object invalid
      summary: Create a MediaSeries
      tags:
      - MediaSeries
    x-public: true
  /media/v1/media-series/{id}:
    delete:
      operationId: DeleteMediaSeries
      responses:
        "204":
          description: MediaSeries successfully deleted
        "400":
          description: invalid input, object invalid
      summary: Delete a MediaSeries
      tags:
      - MediaSeries
    get:
      operationId: GetOneMediaSeries
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/MediaSeries'
          description: OK
      summary: Get one MediaSeries
      tags:
      - MediaSeries
    parameters:
    - description: The ID of the MediaSeries to get
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    - description: List of related resources to embed.
      in: query
      name: include
      schema:
        enum:
        - images
        - end-user-access-roles
        type: string
    patch:
      operationId: UpdateMediaSeries
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MediaSeries'
        description: MediaSeries to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/MediaSeries'
          description: MediaSeries successfully updated
        "400":
          description: invalid input, object invalid
      summary: Update a MediaSeries
      tags:
      - MediaSeries
    x-public: true
  /notifications:
    get:
      description: Lists all Notifications based on requested filters
      operationId: GetAllNotifications
      parameters:
      - $ref: '#/components/parameters/PagePublic'
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      notifications:
                        items:
                          $ref: '#/components/schemas/Notification'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/LinksPublic'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: Search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: List Notifications
      tags:
      - Notification
    post:
      description: Creates the Notification sent in the request body
      operationId: CreateNotification
      requestBody:
        content:
          application/hal+json:
            schema:
              $ref: '#/components/schemas/Notification'
        description: Supply the Notification to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Notification'
          description: Notification successfully created
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "422":
          $ref: '#/components/responses/UnprocessableEntityPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Create a Notification
      tags:
      - Notification
    x-public: true
  /notifications/{id}:
    delete:
      description: Deletes the Notification identified by the ID in the request
      operationId: DeleteNotification
      responses:
        "204":
          description: Notification successfully deleted
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Delete a Notification
      tags:
      - Notification
    get:
      description: Gets one Notification identified by the ID in the request
      operationId: GetOneNotification
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Notification'
          description: OK
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Get one Notification
      tags:
      - Notification
    parameters:
    - description: The ID of the Notification
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    patch:
      description: Updates the Notification identified by the ID in the request, using
        the details in the request body
      operationId: UpdateNotification
      requestBody:
        content:
          application/hal+json:
            schema:
              $ref: '#/components/schemas/Notification'
        description: Supply the Notification to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Notification'
          description: Notification successfully updated
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Update a Notification
      tags:
      - Notification
    x-public: true
  /pages/v1/links:
    get:
      operationId: GetAllLinks
      parameters:
      - description: Filter by id
        in: query
        name: filter[id]
        schema:
          format: uuid
          type: string
        x-public: true
      - description: Filter by app_key
        in: query
        name: filter[app_key]
        schema:
          type: string
        x-public: true
      - description: Filter by short_code
        in: query
        name: filter[short_code]
        schema:
          type: string
        x-public: true
      - description: Filter by title. Supports wildcard matching with `*`.
        in: query
        name: filter[title]
        schema:
          type: string
        x-public: true
      - description: Filter by status
        in: query
        name: filter[status]
        schema:
          enum:
          - draft
          - scheduled
          - published
          type: string
        x-public: true
      - description: Filter by has_tap
        in: query
        name: filter[has_tap]
        schema:
          type: boolean
        x-public: true
      - description: Filter by deleted status. Defaults to false (non-deleted). When
          true, returns soft-deleted links.
        in: query
        name: filter[deleted]
        schema:
          type: boolean
        x-public: true
      - description: fields to sort on
        in: query
        name: sort
        schema:
          anyOf:
          - enum:
            - created_at
            - -created_at
            type: string
          - enum:
            - updated_at
            - -updated_at
            type: string
          - enum:
            - title
            - -title
            type: string
          type: string
        x-public: true
      - description: the page number to retrieve
        in: query
        name: page[number]
        schema:
          minimum: 0
          type: integer
        x-public: true
      - description: maximum number of records to return
        in: query
        name: page[size]
        schema:
          maximum: 100
          minimum: 0
          type: integer
        x-public: true
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      links:
                        items:
                          $ref: '#/components/schemas/Link'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/CollectionLinks'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: bad input parameter
      summary: List Links
      tags:
      - Link
    post:
      description: Adds a new Link
      operationId: CreateLink
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Link'
        description: Link to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Link'
          description: Link successfully created
        "400":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: invalid input, object invalid
      summary: Create a Link
      tags:
      - Link
      x-public: true
    x-public: true
  /pages/v1/links/{id}:
    delete:
      operationId: DeleteLink
      responses:
        "204":
          description: Link successfully deleted
        "400":
          description: invalid input, object invalid
      summary: Delete a Link
      tags:
      - Link
      x-public: true
    get:
      operationId: GetOneLink
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Link'
          description: OK
      summary: Get one Link
      tags:
      - Link
      x-public: true
    parameters:
    - description: The ID of the Link to get
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
      x-public: true
    patch:
      operationId: UpdateLink
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Link'
        description: Link to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Link'
          description: Link successfully updated
        "400":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: invalid input, object invalid
      summary: Update a Link
      tags:
      - Link
      x-public: true
    x-public: true
  /payment-intents:
    post:
      description: |
        Creates a new Payment Intent. A Payment Intent guides you through the process of collecting a payment from your customer.

        By default the payment is captured automatically when the customer completes the payment. To authorize first and capture later, set `manual_capture` to `true` in the request body; after the client confirms the payment (e.g. with Stripe.js using the returned `client_secret`), call POST `/payment-intents/{id}/capture` to capture the full amount.
      operationId: CreatePaymentIntent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentIntent'
        description: Payment Intent to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/PaymentIntent'
          description: Payment Intent successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a Payment Intent
      tags:
      - PaymentIntent
      x-public: true
    x-public: true
  /payment-intents/{id}/capture:
    parameters:
    - description: The Payment Intent ID (e.g. from the create response or Stripe).
      in: path
      name: id
      required: true
      schema:
        example: pi_1M1hkgCyNv84EeVk75UONG4n
        type: string
    post:
      description: |
        Captures a Payment Intent that is in `requires_capture` state (created with `manual_capture: true` and already confirmed by the customer). Captures the full originally authorized amount.

        Only call this after the customer has confirmed the payment on the client (e.g. using Stripe.js with the `client_secret` from the create response). Requires Admin, Giving Manager, or API Client role for the payment intent's organization.
      operationId: CapturePaymentIntent
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/PaymentIntent'
          description: Payment Intent successfully captured
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Capture a Payment Intent
      tags:
      - PaymentIntent
      x-public: true
    x-public: true
  /payments:
    get:
      description: Lists all Payments by Org
      operationId: ListPayments
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/Sort'
      - $ref: '#/components/parameters/FilterID'
      - $ref: '#/components/parameters/FilterOrg'
      - $ref: '#/components/parameters/Fields'
      - description: Filter by end user id
        in: query
        name: filter[end-user.id]
        schema:
          format: uuid
          type: string
      - description: Filter by forms service response id
        in: query
        name: filter[form-response.id]
        schema:
          format: uuid
          type: string
      - description: Filter by submission id
        in: query
        name: filter[submission.id]
        schema:
          format: uuid
          type: string
      - description: Filter by payment intent id
        in: query
        name: filter[payment-intent.id]
        schema:
          type: string
      - description: Filter by donation id
        in: query
        name: filter[donation.id]
        schema:
          format: uuid
          type: string
      - description: Filter by remote deposit id
        in: query
        name: filter[remote-deposit-item.id]
        schema:
          format: uuid
          type: string
      - description: Filter by checkout id
        in: query
        name: filter[checkout.id]
        schema:
          format: uuid
          type: string
      - $ref: '#/components/parameters/PaymentIncludes'
      - description: |
          Filter by Payout ID attached to the Submission's Payment.
        in: query
        name: filter[payout.id]
        schema:
          format: uuid
          type: string
      - description: Filter by account.id (only applies when applied along with a
          payout.id filter)
        in: query
        name: filter[account.id]
        schema:
          format: uuid
          type: string
      - description: Filter by auth date
        in: query
        name: filter[auth_date]
        schema:
          format: date-time
          type: string
      - description: lower bound for auth date range filtering of payments
        in: query
        name: filter[auth_date.min]
        schema:
          format: date-time
          type: string
      - description: upper bound for auth date range filtering of payments
        in: query
        name: filter[auth_date.max]
        schema:
          format: date-time
          type: string
      - description: lower bound for payment amount range filtering of payments
        in: query
        name: filter[amount.min]
        schema:
          type: integer
      - description: upper bound for payment amount range filtering of payments
        in: query
        name: filter[amount.max]
        schema:
          type: integer
      - description: |
          Filter payments by status. Note:
          - `refunded` matches any payment with at least one refund, including partially refunded payments.
          - `partial refund` matches payments where the total refunded amount is less than the original payment amount (a strict subset of `refunded`).
          - `SuccessfullyRepresented` refers to dispute won payments.
        in: query
        name: filter[status]
        schema:
          enum:
          - success
          - refunded
          - partial refund
          - pending
          - disputed
          - failure
          - SuccessfullyRepresented
          - paid
          - transfer pending
          type: string
      - description: the type of payment to filter by. currently supports form and
          event types
        in: query
        name: filter[type]
        schema:
          enum:
          - event
          - form
          type: string
      - description: |
          Search term to filter payments by. Supports the `=` operator. Will search payment ID, payment amount
          and everything in the people search API. See https://api-docs.subsplash.net/search/#tag/Search/operation/Search
        example: Frank
        in: query
        name: filter[search]
        schema:
          type: string
      - description: |
          Filters payments by instrument type. Filtering by Card will map to 'MasterCard', 'Discover', 'Visa', 'American Express', 'JCB', and 'Diners Club'
        in: query
        name: filter[instrument.type]
        schema:
          enum:
          - Card
          - ACH
          - Cash
          - Check
          - Other
          - DAF
          - QCD
          - Cash equivalent
          - In kind
          - Other Non-Trad
          type: string
      - description: |
          Filters payments based on Form ID. can be event-registration or payment-form type.
        in: query
        name: filter[form.id]
        schema:
          format: uuid
          type: string
      - description: |
          Filter payments by their external payment token
        in: query
        name: filter[external_id]
        schema:
          type: string
      - description: |
          Comma separated list of fields to include in the response.
          Example: `fields[payment]=id,amount,status`
          Available fields:
            - id: Unique identifier
            - short_id: Short numeric identifier
            - org_key: Organization key
            - ip_address: IP address of the payer
            - status: Payment status (success, failure, pending, disputed, refunded, partial refund, transfer pending)
            - amount: Payment amount and currency
            - fee: Fee amount and currency
            - effective_amount: Amount minus sum of partial refund amounts
            - effective_fee: Fee minus sum of refund fees
            - auth_date: Payment timestamp
            - auth_code: Authorization code
            - error_reason: Failure reason
            - tax_deductible: Tax deductible flag
            - check_number: Check number (for check payments)
            - memo: Payment memo
            - created_at: Creation timestamp
            - updated_at: Last update timestamp
        in: query
        name: fields[payment]
        schema:
          enum:
          - id
          - short_id
          - org_key
          - ip_address
          - status
          - amount
          - fee
          - effective_amount
          - effective_fee
          - auth_date
          - auth_code
          - error_reason
          - tax_deductible
          - check_number
          - memo
          - created_at
          - updated_at
          type: string
      - description: The Accept request HTTP header indicates which content types,
          expressed as MIME types, the client is able to understand.
        in: header
        name: Accept
        schema:
          default: application/hal+json
          enum:
          - application/hal+json
          - text/csv
          type: string
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Collection'
                - properties:
                    _embedded:
                      properties:
                        payments:
                          items:
                            $ref: '#/components/schemas/Payment'
                          type: array
                      type: object
            text/csv:
              schema:
                example: |
                  Payment date,Payment timestamp,First name,Last name,Email,Phone,Member ID,Payment type,Payment source,Payment method,Payment ID,Status,Gross amount,Fee,Net amount,Transfer ID,Transfer date
                  2024-10-09,2024-10-09 16:52:12 +0000 UTC,Sonic,The-Hedgehog,sonic@footlocker.com,5556667777,11111111-1111-1111-1111-111111111111,Registration,Event Title,Visa,123456,success,$100.00,$4.00,$96.00,1023,2024-10-15
                type: string
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Payments
      tags:
      - Payment
      x-public: true
  /payments/{id}:
    get:
      description: Retrieves a single Payment by ID
      operationId: GetOnePayment
      parameters:
      - $ref: '#/components/parameters/PaymentIncludes'
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Payment'
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Payment
      tags:
      - Payment
      x-public: true
    parameters:
    - $ref: '#/components/parameters/UUID'
  /people/v1/households:
    get:
      operationId: ListHouseholds
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/Fields'
      - $ref: '#/components/parameters/FilterID'
      - $ref: '#/components/parameters/FilterStatus'
      - $ref: '#/components/parameters/FilterHouseholdExternalID'
      - $ref: '#/components/parameters/FilterCreatedAt'
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Collection'
                - properties:
                    _embedded:
                      properties:
                        households:
                          items:
                            $ref: '#/components/schemas/Household'
                          type: array
                      type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: List Households
      tags:
      - Household
    post:
      operationId: CreateHousehold
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Household'
        description: |
          Household to create.

          Notes:
            1. A member can only be in one household at a time. If a member is already in a household, the request will fail.
        required: true
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Household'
          description: Household successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: Create a household
      tags:
      - Household
    x-public: true
  /people/v1/households/{id}:
    delete:
      description: |
        This endpoint deletes a household resource and removes all of it's members, trusted people and guests from the household.

        Notes:
          * A specific member can be removed by [PATCHing the household](https://api-docs.subsplash.net/people/#tag/Household/operation/UpdateHousehold) or by [PATCHing the profile](https://api-docs.subsplash.net/people/#tag/Profile/operation/UpdateProfile) and setting the household to `null`.
          * A specific trusted person or guest can be removed by [DELETING the household relationship](https://api-docs.subsplash.net/people/#tag/HouseholdRelationship/operation/DeleteHouseholdRelationship).
      operationId: DeleteHousehold
      responses:
        "204":
          description: Household successfully deleted
        "400":
          $ref: '#/components/responses/BadRequest'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: Delete a Household
      tags:
      - Household
    get:
      operationId: GetOneHousehold
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Household'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: Get one Household
      tags:
      - Household
    parameters:
    - $ref: '#/components/parameters/UUID'
    patch:
      description: |
        This endpoint supports

        1. <b>Modifying</b> the metadata of a household resource
        2. <b>Adding</b> members to a household. In order to add a member to a household, the member should not be in another household.
        3. <b>Removing</b> members from a household
        4. <b>Updating</b> the household role of members

        <h3>Adding, removing, or modifying a household member</h3>

        Lets say we have the following request that returns an existing household

        ```
        GET /v1/households/{household_id}?include=members

        {
          "id": "household_id"
          "name": "some household name",
          ...
          "_embedded": {
            "members": [
              {
                "id": "some_profile_id",
                ...
                "household_role": "parent"
              },
              {
                "id": "some_other_profile_id",
                ...
                "household_role": "child"
              },
              {
                "id": "some_untouched_profile",
                ...
                "household_role": "child"
              }
            ]
          }
        }
        ```

        And the following update is made

        ```
        PATCH /v1/households/{household_id}

        {
          "name": "new household name",
          "_embedded": {
            "members": [
              {
                "id": "some_profile_id",
                "household_role": "guardian" // update the parent to guardian
              },
              {
                "id": "some_brand_new_profile_id", // remove the old profile and add a new one with the child role
                "household_role": "child"
              },
              {
                "id": "some_untouched_profile",
                "household_role": "child"
              }
            ]
          }
        }
        ```

        This will yield the following response

        ```
        {
          "id": "household_id",
          "name": "new household name",
          ...
          "_embedded": {
            "members": [
              {
                "id": "some_profile_id",
                ...
                "household_role": "guardian"
              },
              {
                "id": "some_brand_new_profile_id",
                ...
                "household_role": "child"
              },
              {
                "id": "some_untouched_profile",
                ...
                "household_role": "child"
              }
            ]
          }
        }
        ```

        Summary of what happened:

        1. <b>Update</b> Profile `some_profile_id` so it's `household_role` is now `guardian`.
        2. <b>Remove</b> Profile `some_other_profile_id` from the household since it no longer is in the `members` array.
        3. <b>Add</b> Profile `some_brand_new_profile_id` and assign it's `household_role` to be `child`.
        4. <b>Update</b> the name of the household to new household name

        <h4>Notes</h4>

        * Updating household members acts like a PUT request. The members array in the request body will be used to update the members list in the database. The members list in the database will be overwritten with the members array in the request body. This means that any member that is not included in the request body will be removed from the household. Thus, the member with the id `some_untouched_profile` needs to be included in the request body in order to stay in the household.
        * The `household_role` is <b>required</b>

        <h3>Modifying Household Metadata Without Modifying Members</h3>

        If a request is made where `_embedded.members` is not present in the request body, the members array will not be modified at all.

        ```
        PATCH /v1/households/{household_id}

        {
          "name": "new household name"
        }
        ```

        ```
        Response

        {
          "name": "new household name",
          ...
          "_embedded": {
            "members": [
              {
                "id": "some_profile_id"
              },
              {
                "id": "some_brand_new_profile_id"
              },
              {
                "id": "some_untouched_profile"
              }
            ]
          }
        }
        ```

        <h3>Errors</h3>

        <h4>Removing All Household Members</h4>

        If the following request is made

        ```
        PATCH /v1/households/{household_id}

        {
          "_embedded": {
            "members": []
          }
        }
        ```

        Response
        ```
        {
            "errors": [
                {
                    "code": "invalid_value",
                    "detail": "members must contain at least 1 member"
                    "source": {
                        "pointer": "/_embedded.members"
                    }
                }
            ]
        }
        ```

        This endpoint will throw a validation error since the household must have at least 1 member. To remove all the members of a household, the household can be deleted instead.

        <h4>Adding a Member</h4>

        When adding a member to a household, the `household_role` is <b>required</b>.

        Lets say we have a request where we are trying to add 2 new members to an already existing household

        ```
        GET /v1/households/{household_id}?include=members

        {
          "id": "household_id",
          "name": "new household name",
          ...
          "_embedded": {
            "members": [
              {
                "id": "some_profile_id",
                ...
                "household_role": "guardian"
              },
              {
                "id": "some_brand_new_profile_id",
                ...
                "household_role": "child"
              },
              {
                "id": "some_untouched_profile",
                ...
                "household_role": "child"
              }
            ]
          }
        }
        ```

        ```
        PATCH /v1/households/{household_id}

        {
          "_embedded": {
            "members": [
              {
                "id": "some_other_profile_id",
                // household_role is missing
              },
              {
                "id": "some_other_profile_id_2",
                "household_role": "some invalid household role" // household_role is invalid
              },
              ...
            ]
          }
        }
        ```

        ```
        Response body

        {
            "errors": [
                {
                    "code": "missing_value",
                    "detail": "household_role is required"
                    "source": {
                        "pointer": "/_embedded/members/0/household_role" // 0 indicates the index of the member that caused the error
                    }
                },
                {
                    "code": "invalid_value",
                    "detail": "household_role is invalid: some invalid household role"
                    "source": {
                        "pointer": "/_embedded/members/1/household_role" // 1 indicates the index of the member that caused the error
                    }
                }
            ]
        }
        ```

        The server will throw an error for each member that fails validation. All members must pass validation in order for the request to pass.

        Also note that a new member cannot be added to a household if that member is already a guest in the same household.

        <h4>Members Limit</h4>

        A request that attempts to update a household so that it contains more than 20 members will return the following error

        ```
        PATCH /v1/households/{household_id}
        {
          "_embedded": {
            "members": [
              // members exceeds 20 member objects
              ...
            ]
          }
        }
        ```

        ```
        Response
        {
            "errors": [
                {
                    "code": "invalid_value",
                    "detail": "members exceeds max size: 20"
                    "source": {
                        "pointer": "/_embedded/members"
                    }
                }
            ]
        }
        ```

        <h3>Adding or Modifying the household address</h3>

        There are a 2 ways to update the address of the Household.
          1. Send a Address ID. If an `_embedded.address.id` is provided, the service will attempt to look up and attach the requested address to the Household.<br />
            <b>Note</b>: The service will throw a 400 error if there is an issue linking the address to the household.

            PATCH /v1/households/{household_id}
            {
              "_embedded": {
                "address": {
                  "id": "some_address_id"
                }
              }
            }

            Response
            {
              ...
              "_embedded": {
                "address": {
                  "id": "some_address_id",
                  "street": "some street",
                  "city": "some city",
                  ...
                }
              }
            }

          2. Send Address fields without an ID. If an addresses fields are populated without an ID, the service will create a new address and attach it to the Household.<br />
            <b>Note</b>: If an ID is provided with other address fields, the existing address matching the ID will overwrite any provided fields.

            PATCH /v1/households/{household_id}
            {
              "_embedded": {
                "address": {
                  "street": "some street",
                  "city": "some city",
                  ...
                }
              }
            }

            Response
            {
              ...
              "_embedded": {
                "address": {
                  "id": "some_address_id",
                  "street": "some street",
                  "city": "some city",
                  ...
                }
              }
            }
      operationId: UpdateHousehold
      requestBody:
        content:
          application/json:
            schema:
              properties:
                _embedded:
                  description: Embedded resources.
                  properties:
                    address:
                      allOf:
                      - $ref: '#/components/schemas/Address'
                      description: |
                        The optional address for the Household.
                    members:
                      description: |
                        The members of the household. Note that this will override any members
                        set for the household. If not provided, or an empty array, the members
                        will not be updated. <br></br>

                        If the intent is to remove all members from the household, use  [DeleteHousehold](/#operation/DeleteHousehold) instead.
                        <br></br>

                        Note:
                        1. Individual member profile changes are handled via the caller [PATCHing a profile](/#operation/UpdateProfile).
                      items:
                        maxItems: 20
                        properties:
                          household_role:
                            allOf:
                            - $ref: '#/components/schemas/HouseholdRole'
                            - description: |
                                The role of the member in the household.
                          id:
                            allOf:
                            - $ref: '#/components/schemas/UUID'
                        required:
                        - id
                        - household_role
                        type: object
                      type: array
                  type: object
                family_id:
                  description: The fluro family object id.
                  type: string
                fluro_data:
                  additionalProperties: true
                  description: a hidden field used for additional fluro data included
                    in this group
                  type: object
                name:
                  description: The first name of the household.
                  maxLength: 100
                  type: string
                primary_email:
                  description: The primary email address of the household.
                  format: email
                  maxLength: 256
                  type: string
                primary_phone:
                  $ref: '#/components/schemas/PhoneNumber'
                status:
                  $ref: '#/components/schemas/HouseholdStatus'
              type: object
        description: Household to update.
        required: true
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Household'
          description: Household successfully updated
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: Update a Household
      tags:
      - Household
    x-public: true
  /people/v1/profiles:
    get:
      operationId: ListProfiles
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/SortProfiles'
      - $ref: '#/components/parameters/Fields'
      - $ref: '#/components/parameters/FilterID'
      - $ref: '#/components/parameters/FilterEmail'
      - $ref: '#/components/parameters/FilterEmails'
      - $ref: '#/components/parameters/FilterFirstName'
      - $ref: '#/components/parameters/FilterLastName'
      - $ref: '#/components/parameters/FilterDOBDay'
      - $ref: '#/components/parameters/FilterDOBMonth'
      - $ref: '#/components/parameters/FilterDateOfBirth'
      - $ref: '#/components/parameters/FilterGraduationYear'
      - $ref: '#/components/parameters/FilterGender'
      - $ref: '#/components/parameters/FilterExternalID'
      - $ref: '#/components/parameters/FilterShortID'
      - $ref: '#/components/parameters/FilterAddressID'
      - $ref: '#/components/parameters/FilterPhone'
      - $ref: '#/components/parameters/FilterPhones'
      - $ref: '#/components/parameters/FilterCreatedAt'
      - $ref: '#/components/parameters/FilterUpdatedAt'
      - $ref: '#/components/parameters/FilterStatus'
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Collection'
                - properties:
                    _embedded:
                      properties:
                        profiles:
                          items:
                            $ref: '#/components/schemas/ProfileResponse'
                          type: array
                      type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: List Profiles
      tags:
      - Profile
    post:
      description: |
        Adds a new Profile. Note that duplicate profiles per EndUser and Org are not allowed.

        As noted in the request schema, callers must provide an embedded `end-user`
        object. Providing properties (first_name, last_name, email, etc.) without an ID
        is, however, permitted and will create a new EndUser if one does not already
        exist. An existing EndUser will be found via the following criteria:

        1. Find an EndUser with the provided `end-user.email`.
        2. If none found, find one that matches the phone number, first name, and last
           name.
        3. If none found, create a new one.

        `address` may similarly be provided without an ID to auto-create one.

        Any created EndUser or Address will be returned in the response and in the pubsub
        created event.

        <h3>Adding the Profile as a household member</h3>

        1. If the profile is being added as a household member, the request body must include the `household_role` and the `_embedded.household.id` field.
        2. If there are already 20 members in the household, the service will return an error.

        <h3>Adding a Profile's grade/graduation year</h3>

        1. Either of the fields `graduation_year` or `academic_grade` will be accepted when creating a profile.
          However, if both fields are provided, an error will be returned.
        2. If an `academic_grade` object is provided, either `academic_grade.value` or `academic_grade.name` will
          be accepted. However, if both fields are provided, an error will be returned.
      operationId: CreateProfile
      requestBody:
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/ProfileRequest'
              properties:
                updated_by_user:
                  $ref: '#/components/schemas/UpdatedByUserInput'
        description: Profile to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ProfileResponse'
          description: Profile successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "409":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Conflict
          headers:
            Content-Location:
              description: Link to the existing resource.
              schema:
                type: string
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: Create a Profile
      tags:
      - Profile
    x-public: true
  /people/v1/profiles/{id}:
    get:
      operationId: GetOneProfile
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ProfileResponse'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: Get one Profile
      tags:
      - Profile
    parameters:
    - $ref: '#/components/parameters/UUID'
    patch:
      description: |
        Updates a profile resource.

        <h3>Updating Profile's status</h3>

          1. If you would like to update just the profile status (without validating the profile), please use the [/profiles/{id}/status](/#operation/UpdateProfileStatus) endpoint.
          2. Updating the status to `merged`, `gdpr` or `fraud` is not allowed through this endpoint nor through the [/profiles/{id}/status](/#operation/UpdateProfileStatus)  endpoint. To update a profile status to "gdpr" or "fraud" please use the [/account-deletion-request](https://api-docs.subsplash.net/end-user-auth/#tag/AccountDeletionRequest) endpoint so all appropriate actions are taken per the agreement with Apple. To update a profile status to `merged` please use [merge service](https://api-docs.subsplash.net/merge/#tag/MergeJob/operation/CreateMergeJob).
          3. If the profile status is updated to `archived`, the profile will be removed from any household it is associated with.

        <h3>Updating a Profile's address</h3>

        There are a 2 ways to update the address of the Profile.
          1. Send a Address ID. If an `address.id` is provided, the service will attempt to look up and attach the requested address to the Profile.<br />
            <b>Note</b>: The service will throw an error if there is an issue linking the address to profile.
          2. Send Address fields without an ID. If an addresses fields are populated without an ID, the service will create a new address and attach it to the Profile.<br />
            <b>Note</b>: If an ID is provided, the fields will be ignored.

        <h3>Updating a Profile's houshold</h3>

        This endpoint also can be used to add/remove this profile to/from a household with the following requests bodies.

        <h4>Removing the profile from a household</h4>

        ```
        {
            "_embedded": {
                "household": null
            }
        }
        ```

        <h4>Adding the profile to a household</h4>

        ```
        {
            "household_role": "parent"
            "_embedded": {
                "household":{
                    "id": "11111111-1111-1111-1111-111111111111"
                }
            }
        }
        ```

        **Note**: When adding a profile to a household, the request body **must** set the `household_role` to a valid value according to the request body schema below.

        <h3>Updating a Profile's grade/graduation year</h3>

        1. Either of the fields `graduation_year` or `academic_grade` will be accepted when updating a profile. However, if both fields are provided, an error will be returned.
        2. If an `academic_grade` object is provided, either `academic_grade.value` or `academic_grade.name` will be accepted. However, if both fields are provided, an error will be returned.
      operationId: UpdateProfile
      requestBody:
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/ProfileRequest'
              properties:
                created_source:
                  allOf:
                  - $ref: '#/components/schemas/CreatedSource'
                  - readOnly: true
                updated_by_user:
                  $ref: '#/components/schemas/UpdatedByUserInput'
        description: Profile to update.
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/ProfileResponse'
          description: Profile successfully updated
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/UnknownError'
      summary: Update a Profile
      tags:
      - Profile
    x-public: true
  /pledges:
    get:
      description: |
        This endpoint returns a list of pledges based on the given filters and sorts.
      operationId: GetAllPledges
      parameters:
      - description: The resources to include.
        in: query
        name: include
        schema:
          items:
            enum:
            - profiles
            - campaigns
            - campaigns.funds
            - given
            type: string
          type: array
      - description: Eight character org code.
        in: query
        name: filter[org_key]
        required: true
        schema:
          pattern: ^[A-Z0-9]{8}$
          type: string
      - in: query
        name: filter[end-user.id]
        schema:
          format: uuid
          type: string
      - in: query
        name: filter[campaign.id]
        schema:
          format: uuid
          type: string
      - description: |
          Created at date to filter pledges by where created_at is a valid RFC3339 date. Supports `>`, `<`, `=`, and `!=`
          e.g. `?filter[created_at]=>1996-12-19T16:39:57-08:00`
        in: query
        name: filter[created_at]
        schema:
          format: date-time
          type: string
      - description: |
          Updated at date for filtering pledges where updated_at is a valid RFC3339 date. Supports `>`, `<`, `=`, and `!=`
          e.g. `?filter[updated_at]=>1996-12-19T16:39:57-08:00`
        in: query
        name: filter[updated_at]
        schema:
          format: date-time
          type: string
      - description: The page number to retrieve.
        in: query
        name: page[number]
        schema:
          minimum: 0
          type: integer
      - description: Maximum number of records to return.
        in: query
        name: page[size]
        schema:
          maximum: 100
          minimum: 0
          type: integer
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      pledges:
                        items:
                          $ref: '#/components/schemas/PledgeResponse'
                        type: array
                    type: object
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: Search results matching criteria.
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Pledges
      tags:
      - Pledge
      x-public: true
  /pledges/{id}:
    get:
      description: Retrieves detailed information about a specific pledge by its ID.
      operationId: GetOnePledge
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/PledgeResponse'
          description: OK
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Pledge
      tags:
      - Pledge
      x-public: true
    parameters:
    - description: The ID of the pledge to get
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    - description: The resources to include on a given pledge
      in: query
      name: include
      schema:
        items:
          enum:
          - profile
          - given
          type: string
        type: array
  /recurring-donations:
    get:
      description: By default, this endpoint does not return `RecurringDonations`
        with the `canceled` status.
      operationId: GetAllRecurringDonations
      parameters:
      - description: |
          Search term to filter recurring donations by. Supports the `=` operator. Will search funds, causes,
          campuses, amounts, short IDs, and everything in the people search API. See
          https://api-docs.subsplash.net/search/#tag/Search/operation/Search
        example: Frank
        in: query
        name: filter[search]
        schema:
          type: string
      - description: Filter by id.
        in: query
        name: filter[id]
        schema:
          format: uuid
          type: string
      - description: Six character app code
        in: query
        name: filter[app_key]
        schema:
          pattern: ^[A-Z0-9]{6}$
          type: string
      - description: Org key of the organization to which this recurring donation
          belongs. Supports one or a list of org keys.
        in: query
        name: filter[org_key]
        schema:
          type: string
      - description: ID for the donor (users table).
        in: query
        name: filter[donor.id]
        schema:
          format: uuid
          type: string
      - description: ID for the end user. This filters recurring donations by the
          end user's ID, querying both the legacy user ID and the current end-user
          ID fields. Supports one or a list of UUIDs.
        in: query
        name: filter[end-user.id]
        schema:
          format: uuid
          type: string
      - description: ID for the associated campus if applicable.
        in: query
        name: filter[campus.id]
        schema:
          format: uuid
          type: string
      - description: ID for the fund (funds table) or potentially subfund (causes
          table).
        in: query
        name: filter[fund.id]
        schema:
          format: uuid
          type: string
      - description: ID for the paysource (either card or user_bank_account uuid).
        in: query
        name: filter[paysource.id]
        schema:
          format: uuid
          type: string
      - description: ID for the parent of any recurring donations (time trigger records),
          used primarily for semi monthly gifts.
        in: query
        name: filter[parent.id]
        schema:
          format: uuid
          type: string
      - description: Three character representation of valid currency (USD or CAD).
        in: query
        name: filter[currency]
        schema:
          maxLength: 3
          type: string
      - description: Filter by date/time of next processing date.
        in: query
        name: filter[next_process_at]
        schema:
          format: date-time
          type: string
      - description: Amount to filter by.
        in: query
        name: filter[amount]
        schema:
          type: number
      - description: Filter by donor_covered_fee flag.
        in: query
        name: filter[donor_covered_fee]
        schema:
          type: boolean
      - description: |
          Status to filter recurring donations by. Supports a single status or a collection of statuses using the `=` operator.

          The `active` status represents RecurringDonations that have not been canceled or failed.

          The `canceled` status represents Recurring Donations that have been updated to stop processing. Recurring donations with the `canceled` status are only returned when this filter value is included in the request.

          The `failed` status represents Recurring Donations that encountered an error the last time it tried to process a donation.
        in: query
        name: filter[status]
        schema:
          enum:
          - active
          - canceled
          - failed
          type: string
      - description: Fields to sort on.
        in: query
        name: sort
        schema:
          anyOf:
          - enum:
            - id
            - -id
            - created_at
            - -created_at
            - updated_at
            - -updated_at
            - next_process_at
            - -next_process_at
            - last_processed_at
            - -last_processed_at
            - amount
            - -amount
            type: string
          type: string
      - description: The page number to retrieve.
        in: query
        name: page[number]
        schema:
          minimum: 0
          type: integer
      - description: Maximum number of records to return.
        in: query
        name: page[size]
        schema:
          maximum: 100
          minimum: 0
          type: integer
      - description: The resources to include on the recurring donation.
        in: query
        name: include
        schema:
          items:
            enum:
            - profile
            - funds
            - campuses
            type: string
          type: array
      - description: The Accept request HTTP header indicates which content types,
          expressed as MIME types, the client is able to understand.
        in: header
        name: Accept
        schema:
          default: application/hal+json
          enum:
          - application/hal+json
          - text/csv
          type: string
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginationProperties'
                - properties:
                    _embedded:
                      properties:
                        recurring-donations:
                          items:
                            $ref: '#/components/schemas/RecurringDonation'
                          type: array
                      type: object
                    _links:
                      $ref: '#/components/schemas/CollectionLinks'
                  type: object
            text/csv:
              schema:
                example: |
                  first_name,last_name,email,donor_id,member_id,campus,fund,subfund,frequency,status,last_gift,scheduled,amount
                  Mitch,Hedberg,mitch.hedberg@hotmail.com,,,a fund,a subfund,weekly,active,2020-12-19T16:39:57-08:00,2022-12-19T16:39:57-08:00,$22.52
                type: string
          description: Search results matching criteria.
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: bad input parameter
      summary: List RecurringDonations
      tags:
      - RecurringDonation
      x-public: true
  /recurring-donations/{id}:
    get:
      description: Retrieves detailed information about a specific recurring donation
        by its ID.
      operationId: GetOneRecurringDonation
      parameters:
      - description: The resources to include on the recurring donation.
        in: query
        name: include
        schema:
          items:
            enum:
            - profile
            - funds
            - campuses
            type: string
          type: array
      - description: |
          Since we have a use case for viewing canceled recurring-donations, we're adding support for a status filter in our GetOneRecurringDonation API.
          Status to filter recurring donation by. Supports a single status or a collection of statuses using the `=` operator.
          The `active` status represents RecurringDonations that have not been canceled or failed.
          The `canceled` status represents Recurring Donations that have been updated to stop processing. Recurring donations with the `canceled` status are only returned when this filter value is included in the request.
          The `failed` status represents Recurring Donations that encountered an error the last time it tried to process a donation.
        in: query
        name: filter[status]
        schema:
          enum:
          - active
          - canceled
          - failed
          type: string
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/RecurringDonation'
          description: OK
      summary: Get one RecurringDonation
      tags:
      - RecurringDonation
      x-public: true
    parameters:
    - description: The ID of the RecurringDonation to get.
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
  /refunds:
    get:
      description: Lists all Refunds by Org
      operationId: ListRefunds
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/Sort'
      - $ref: '#/components/parameters/FilterID'
      - $ref: '#/components/parameters/FilterOrg'
      - $ref: '#/components/parameters/Fields'
      - description: |
          Specify which embedded resources to include with each resource. See [Includes](https://api-docs.subsplash.net/#tag/Includes) for details.

          Possible options are:
          - `organization`
          - `payment`
          - `payout`
          - `issued-by`
        explode: false
        in: query
        name: include
        schema:
          items:
            enum:
            - organization
            - payment
            - payout
            - issued-by
            type: string
          type: array
        style: form
      - description: Filter refunds by payment ID
        in: query
        name: filter[payment.id]
        schema:
          format: uuid
          type: string
      - description: Filter by payfac's ID.
        in: query
        name: filter[external_id]
        schema:
          type: string
      - description: Lower bound for updated_at range filtering of refunds
        in: query
        name: filter[updated_at.min]
        schema:
          format: date-time
          type: string
      - description: Upper bound for updated_at range filtering of refunds
        in: query
        name: filter[updated_at.max]
        schema:
          format: date-time
          type: string
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Collection'
                - properties:
                    _embedded:
                      properties:
                        refunds:
                          items:
                            $ref: '#/components/schemas/Refund'
                          type: array
                      type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Refunds
      tags:
      - Refund
      x-public: true
  /refunds/{id}:
    get:
      description: Get One Refund by ID
      operationId: GetOneRefund
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Refund'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Refund
      tags:
      - Refund
      x-public: true
    parameters:
    - $ref: '#/components/parameters/UUID'
  /setup-intents:
    post:
      description: |
        Creates a new Setup Intent. A Setup Intent lets you save a customer's card without an initial payment.
      operationId: CreateSetupIntent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetupIntent'
        description: Setup Intent to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/SetupIntent'
          description: Setup Intent successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a Setup Intent
      tags:
      - SetupIntent
      x-public: true
  /terminals:
    get:
      description: Retrieves a list of donation terminals based on the provided filters
        and pagination parameters.
      operationId: GetAllDonationTerminals
      parameters:
      - description: Filter by id.
        in: query
        name: filter[id]
        schema:
          format: uuid
          type: string
      - description: Six character short code (app_key). Must be included to return
          funds and campuses.
        in: query
        name: filter[short_code]
        schema:
          pattern: ^[A-Z0-9]{6}$
          type: string
      - description: |
          Specify which embedded resources to include with each resource.
          Possible options are:
            - `unpublished-funds`
            - `unpublished-campuses`
        in: query
        name: include
        schema:
          items:
            enum:
            - unpublished-funds
            - unpublished-campuses
            type: string
          type: array
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      terminals:
                        items:
                          $ref: '#/components/schemas/DonationTerminal'
                        type: array
                    type: object
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: Search results matching criteria.
        "400":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: bad input parameter
        "401":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: unauthorized request
        "500":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: unknown error
      summary: List DonationTerminals
      tags:
      - DonationTerminal
      x-public: true
  /tokens/v1/keys:
    get:
      description: |
        This endpoint lists all active public keys as a [JSONWebKeySet](https://tools.ietf.org/html/rfc7517#page-10).
      operationId: GetAllPublicKeys
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  keys:
                    items:
                      $ref: '#/components/schemas/JSONWebKey'
                    type: array
                type: object
          description: All active public keys
        "400":
          $ref: '#/components/responses/BadRequest_public'
        "401":
          $ref: '#/components/responses/Unauthorized_public'
        "403":
          $ref: '#/components/responses/Forbidden_public'
        "500":
          $ref: '#/components/responses/InternalServerError_public'
      summary: Get All Public Keys
      tags:
      - SigningKey
      x-subsplash-sdk:
        ignore: true
    x-public: true
  /tokens/v1/keys/{id}:
    get:
      description: |
        Gets one Public Key (as a [JSONWebKey](https://datatracker.ietf.org/doc/html/rfc7517))
        identified by the ID in the request. Clients should use this endpoint
        when they receive a token with an unrecognized key ID (`kid`). This
        endpoint's responses may be cached indefinitely.
      operationId: GetOnePublicKey
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/JSONWebKey'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized_public'
        "403":
          $ref: '#/components/responses/Forbidden_public'
        "404":
          $ref: '#/components/responses/NotFound_public'
        "500":
          $ref: '#/components/responses/InternalServerError_public'
      summary: Get one Public Key
      tags:
      - SigningKey
      x-subsplash-sdk:
        ignore: true
    parameters:
    - description: The ID of the Public Key. This ID is also used as the kid in the
        tokens generated by this service.
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    x-public: true
  /tokens/v1/token:
    post:
      description: Creates a Token based on the client credentials sent in the request.
      operationId: CreateToken
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TokenForm'
        description: Supply the required form data to generate a Token
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Token'
          description: OK
        "400":
          $ref: '#/components/responses/BadRequest_public'
        "401":
          $ref: '#/components/responses/Unauthorized_public'
        "403":
          $ref: '#/components/responses/Forbidden_public'
        "500":
          $ref: '#/components/responses/InternalServerError_public'
      summary: Create a Token
      tags:
      - Token
    x-public: true
  /topic-subscriptions:
    get:
      description: Lists all Topic Subscriptions based on requested filters
      operationId: GetAllTopicSubscriptions
      parameters:
      - description: Filter by app_key
        in: query
        name: filter[app_key]
        schema:
          pattern: ^[A-Z0-9]{6}$
          type: string
      - description: Filter by id
        in: query
        name: filter[id]
        schema:
          format: uuid
          type: string
      - description: Filter by topic (id of topic)
        in: query
        name: filter[topic]
        schema:
          format: uuid
          type: string
      - description: Filter by platform endpoint (id of platform endpoint)
        in: query
        name: filter[platform_endpoint]
        schema:
          format: uuid
          type: string
      - description: Filter by deleted time
        in: query
        name: filter[deleted_at]
        schema:
          format: date-time
          type: string
      - description: |
          Fields by which you can sort.
          There are two directions for sorting: ascending and descending. To specify a direction, prepend the field name
          with + for ascending or - for descending. Ascending is the default, so it's fine to omit +.
        in: query
        name: sort
        schema:
          anyOf:
          - enum:
            - created_at
            - -created_at
            type: string
          type: string
      - $ref: '#/components/parameters/PagePublic'
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      topic-subscriptions:
                        items:
                          $ref: '#/components/schemas/TopicSubscription'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/LinksPublic'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: Search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: List Topic Subscriptions
      tags:
      - TopicSubscription
      x-public: true
  /topic-subscriptions/{id}:
    get:
      description: Gets one Topic Subscription identified by the ID in the request
      operationId: GetOneTopicSubscription
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/TopicSubscription'
          description: OK
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Get one Topic Subscription
      tags:
      - TopicSubscription
      x-public: true
    parameters:
    - description: The ID of the Topic Subscription
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
  /topics:
    get:
      description: Lists all Topics based on requested filters
      operationId: GetAllTopics
      parameters:
      - description: Filter by app_key
        in: query
        name: filter[app_key]
        schema:
          pattern: ^[A-Z0-9]{6}$
          type: string
        x-public: true
      - description: Filter by id
        in: query
        name: filter[id]
        schema:
          format: uuid
          type: string
        x-public: true
      - description: Filter by is general
        in: query
        name: filter[is_general]
        schema:
          type: boolean
        x-public: true
      - description: |
          Filter by is private.  Note this must be set to true to see private topics.  If this filter is not set, the
          default behavior is to not show private topics.
        in: query
        name: filter[is_private]
        schema:
          type: boolean
        x-public: true
      - description: Filter by deactivation time
        in: query
        name: filter[deactivated_at]
        schema:
          format: date-time
          type: string
        x-public: true
      - description: |
          Fields by which you can sort.
          There are two directions for sorting: ascending and descending. To specify a direction, prepend the field name
          with + for ascending or - for descending. Ascending is the default, so it's fine to omit +.
        in: query
        name: sort
        schema:
          anyOf:
          - enum:
            - created_at
            - -created_at
            type: string
          - enum:
            - deactivated_at
            - -deactivated_at
            type: string
          type: string
        x-public: true
      - $ref: '#/components/parameters/PagePublic'
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      topics:
                        items:
                          $ref: '#/components/schemas/Topic'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/LinksPublic'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: Search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: List Topics
      tags:
      - Topic
    post:
      description: Creates the Topic sent in the request body
      operationId: CreateTopic
      requestBody:
        content:
          application/hal+json:
            schema:
              $ref: '#/components/schemas/Topic'
        description: Supply the Topic to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Topic'
          description: Topic successfully created
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "409":
          $ref: '#/components/responses/ConflictPublic'
        "422":
          $ref: '#/components/responses/UnprocessableEntityPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Create a Topic
      tags:
      - Topic
      x-public: true
  /topics/{id}:
    delete:
      description: Deletes the Topic identified by the ID in the request
      operationId: DeleteTopics
      responses:
        "204":
          description: Topic successfully deleted
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Delete a Topic
      tags:
      - Topic
    get:
      description: Gets one Topic identified by the ID in the request
      operationId: GetOneTopic
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Topic'
          description: OK
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Get one Topic
      tags:
      - Topic
    parameters:
    - description: The ID of the Topic
      in: path
      name: id
      required: true
      schema:
        format: uuid
        type: string
    patch:
      description: Updates the Topic identified by the ID in the request, using the
        details in the request body
      operationId: UpdateTopic
      requestBody:
        content:
          application/hal+json:
            schema:
              $ref: '#/components/schemas/Topic'
        description: Supply the Topic to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Topic'
          description: Topic successfully updated
        "400":
          $ref: '#/components/responses/BadRequestPublic'
        "401":
          $ref: '#/components/responses/UnauthorizedPublic'
        "403":
          $ref: '#/components/responses/ForbiddenPublic'
        "404":
          $ref: '#/components/responses/NotFoundPublic'
        "409":
          $ref: '#/components/responses/ConflictPublic'
        "500":
          $ref: '#/components/responses/InternalServerErrorPublic'
      summary: Update a Topic
      tags:
      - Topic
    x-public: true
  /webhooks/v1/send-attempts:
    get:
      operationId: ListSendAttempts
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      send-attempts:
                        items:
                          $ref: '#/components/schemas/SendAttempt'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/CollectionLinks'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List SendAttempts
      tags:
      - SendAttempt
    x-public: true
  /webhooks/v1/webhooks:
    get:
      operationId: ListWebhooks
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  _embedded:
                    properties:
                      webhooks:
                        items:
                          $ref: '#/components/schemas/Webhook'
                        type: array
                    type: object
                  _links:
                    $ref: '#/components/schemas/CollectionLinks'
                  count:
                    description: Number of resources on current page.
                    minimum: 0
                    readOnly: true
                    type: integer
                  total:
                    description: Total number of resources across all pages.
                    minimum: 0
                    readOnly: true
                    type: integer
                type: object
          description: search results matching criteria
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: List Webhooks
      tags:
      - Webhook
    post:
      description: Adds a new Webhook
      operationId: CreateWebhook
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Webhook'
        description: Webhook to create
      responses:
        "201":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Webhook'
          description: Webhook successfully created
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Create a Webhook
      tags:
      - Webhook
    x-public: true
  /webhooks/v1/webhooks/{id}:
    delete:
      operationId: DeleteWebhook
      responses:
        "204":
          description: Webhook successfully deleted
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Delete a Webhook
      tags:
      - Webhook
    get:
      operationId: GetOneWebhook
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Webhook'
          description: OK
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Get one Webhook
      tags:
      - Webhook
    parameters:
    - description: The ID of the Webhook to get
      in: path
      name: id
      required: true
      schema:
        type: string
    patch:
      operationId: UpdateWebhook
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Webhook'
        description: Webhook to update
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Webhook'
          description: Webhook successfully updated
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Update a Webhook
      tags:
      - Webhook
    x-public: true
  /webhooks/v1/webhooks/{id}/rotate-secret:
    parameters:
    - description: The ID of the Webhook for which to rotate the secret
      in: path
      name: id
      required: true
      schema:
        type: string
    post:
      description: |
        Rotates a webhook's secret. The secret may be rotated immediately
        (when="now") or after a 24 hour delay (when="delayed").

        Rotating a secret immediately will cause webhook requests to be signed
        with the new secret, so webhook verification will fail until the local
        secret has been updated.

        Rotating a secret after a delay will not have any immediate effect.
        Webhook requests will continue to be signed with the existing secret for
        24 hours. After this time has elapsed they will be signed with the new
        secret.
      operationId: RotateWebhookSecret
      requestBody:
        content:
          application/json:
            schema:
              properties:
                when:
                  enum:
                  - now
                  - delayed
                  type: string
              required:
              - when
              type: object
        description: Secret rotation options
      responses:
        "200":
          content:
            application/hal+json:
              schema:
                properties:
                  previous_secret_expires_at:
                    description: |
                      The time at which the old secret will or did expire.
                    format: date-time
                    type: string
                  secret:
                    description: The new secret
                    type: string
                type: object
          description: Webhook secret
        "400":
          $ref: '#/components/responses/BadRequest'
        "401":
          $ref: '#/components/responses/Unauthorized'
        "403":
          $ref: '#/components/responses/Forbidden'
        "404":
          $ref: '#/components/responses/NotFound'
        "500":
          $ref: '#/components/responses/InternalError'
      summary: Rotate a Webhook's Secret
      tags:
      - Webhook
    x-public: true
security:
- BearerAuth: []
servers:
- description: Production API server
  url: https://core.subsplash.com
tags:
- description: |
    Welcome to the Subsplash API Integration Guide. This document is provided
    for Subsplash clients who are interested in building an API integration
    with Subsplash, in order to make your data more valuable and synchronized
    across different systems. The content of this document is technical in
    nature, so a basic understanding of programming and RESTful API
    Integrations is required.

    ## Steps to Integration

    At a high level, building an integration consists of the following steps:
    1. Accept the Terms of Service for using Subsplash APIs.
    1. Work with your Subsplash CSM to obtain access to the API docs and get an API key.
    1. Read the docs to familiarize yourself with the APIs and how they work.
    1. Start building the integration and testing it as you go. Reach out for
    help if you need assistance.

    ## Use Cases
    * Bidirectional synchronization of Donation data between your system and Subsplash Giving.
    * Bidirectional synchronization of People data between your system and Subsplash People.
    * New media content pipeline for publishing new video/audio to multiple platforms.

    ## Prerequisites

    **Identify the systems**: Determine the different systems involved in the data synchronization process. Understand their capabilities, limitations, and the type of profile data they store. You can learn a significant amount about the Subsplash platform’s system by starting with the Subsplash Developer API documentation accessible at [developer.subsplash.com](http://developer.subsplash.com) (work with your CSM to obtain access).

    **Define data requirements:** Identify the specific profile data that needs to be synchronized between your systems. Determine the data fields, attributes, and any additional metadata that should be included.

    **Determine the source of truth**: When synchronizing data between Subsplash’s platform and your CRM or 3rd party system, you’ll need to determine the source of truth. This can vary considerably depending on the quality of the data in each system, the freshness of the data in each system as well as the user patterns of the different systems involved. Feel free to dive a bit deeper into this here: [Source of Truth](http://developer.subsplash.com/docs/getting_started/source_of_truth)

    ## Integration Methods

    There are a couple options for integrating with Subsplash’s platform.

    **Direct API Integration:** If the CRM or 3rd party system provides APIs (Application Programming Interfaces), you can develop custom integration between their API and the Subsplash API. Use the APIs to extract, transform, and load the profile and donations data between the systems.

    **Bulk Data Synchronization:** If the CRM or 3rd party system cannot directly communicate programmatically or it lacks suitable APIs, you can use bulk data synchronization. Extract the target data from your system, transform it into a suitable format, and then iterate through the data synchronizing the data via the Subsplash API.

    ## Synchronization Triggers

    **Establish synchronization triggers:** Determine when the synchronization process should occur. It could be scheduled at regular intervals, triggered by specific events (e.g., user registration or profile update), or based on a combination of factors.

    **Scheduled Process:**
    _Cloud Solutions:_ [Amazon Web Services (AWS)](https://aws.amazon.com/) provides a reliable and scalable cloud service for running scheduled functions called [AWS Lambda](https://aws.amazon.com/lambda/) which can be scheduled in combination with [AWS CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). Other cloud providers like [Microsoft Azure](https://azure.microsoft.com/en-us) and [Google Cloud Platform](https://cloud.google.com/) also offer similar services for running scheduled functions. In Azure, you can utilize [Azure Functions with Timer Triggers](https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer), while Google Cloud provides [Cloud Scheduler](https://cloud.google.com/scheduler) with [Cloud Functions](https://cloud.google.com/functions?hl=en) or Cloud Run. These services offer similar functionality to schedule and trigger functions based on specific time intervals or cron expressions.

    _CRM Solutions:_ CRM systems such as [Salesforce](https://www.salesforce.com/) often contain their own automation features. For Salesforce, using Apex, a class can be created that can implements the [Apex Scheduler](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_scheduler.htm) which can be configured to run periodically. For an advanced ChMS such as [RockRMS, custom jobs](https://community.rockrms.com/Rock/BookContent/9#jobs) can be created which allow for all sorts of integration and customization.

    **Event Webhooks:** Subsplash’s webhook feature can be used to push data into your systems in near real-time when a resource is created, updated, or deleted. Note that using webhooks is a much faster, reliable, cost effective, and efficient way to synchronize data between two systems, and should be preferred over using a periodically scheduled full synchronization process.

    ## Data Flow

    **Data transformation and mapping:** Most likely the CRM or 3rd party system will have different data structures or field naming conventions from Subsplash, so you'll need to map and transform the data during synchronization. Define the mapping rules and transformations required to align the data between the systems. You can access API documentation which includes definitions of different resources such as profiles, donations, or media items at [developer.subsplash.com](http://developer.subsplash.com). Note that some resources support storing an `external_id` field which is a free form string field that allows for you to reference a resource in any arbitrary external system by that system's unique identifier. This field is readable and writable and used to reference to some record in another 3P system they are using for importing or synchronizing data. This field is not validated, nor does any subsplash business logic depend on this field.

    **Error handling and reconciliation:** You will want to implement mechanisms to handle errors and reconcile any data inconsistencies or conflicts that may arise during synchronization. Define strategies for data merging, conflict resolution, and error logging. Many CRMs or 3rd party systems have the ability to merge person profiles and also handle error logging.

    **Monitor and validate:** Set up monitoring and validation processes to ensure the accuracy and integrity of the synchronized data. Implement logging, error tracking, and notifications to quickly identify and address any issues that may arise. Another reasonable strategy might be to simply notify a responsible individual via email if errors or abnormalities arise during the synchronization process.
  name: API Integration Guide
- description: |
    Requests are usually authenticated via a bearer token in the `Authorization`
    header. The token itself is usually a [JSON Web Token (JWT)](https://en.wikipedia.org/wiki/JSON_Web_Token).

    For example, a request might include the following header:
    ```
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.XbPfbIHMI6arZ3Y922BhjWgQzWXcXNrz0ogtVhfEd2o
    ```

    Tokens can be acquired from the [Token endpoint in the Tokens Service](/tokens/#operation/CreateToken).
  name: Authentication
- description: The builder service provides data related to content streams.
  name: Builder Service
- name: Calendar
- description: A campaign is an object representing a pledge drive
  name: Campaign
- description: A campaign contribution is an object representing a specific donation
    within a pledge drive
  name: CampaignContributions
- description: A donation is a charitable gift given by someone to a non-profit organization.
  name: Donation
  x-subsplash-sdk:
    resourceName: Donation
- description: A donation terminal surfaces the settings, features, campuses, and
    funds that are available to make a donation.
  name: DonationTerminal
- description: API for managing donations, funds, campaigns, and related resources
    in the Subsplash platform.
  name: Donations Service
- description: |
    If something goes wrong when a request is made, one or more errors will be returned.

    The error response is an object with an `errors` property, which is an
    array of error objects. Most error responses will only contain one error
    object. Attempts to create or update a resource may return multiple objects
    containing validation errors.

    ## Error object
    The error object may have the following fields:
    * `code`: A string representing the type of error that occurred. See
      [Common codes](#section/Common-codes) for typical codes. This field is
      usually included.
    * `detail`: A human-readable explanation specific to this occurrence of
      the problem. This field is probably always included.
    * `source`: An object containing references to the source of the error,
      optionally including any of the following members. This field is probably
      only rarely included in Error objects.
      * `pointer`: A JSON Pointer ([RFC6901](https://tools.ietf.org/html/rfc6901))
        to the associated entity in the request document (e.g. `"/"` for the
        object itself, or `"/foo"` for an attribute of that name in an object
        that looks like `{"foo": "bar"}`).
      * `parameter`: A string indicating which URI query parameter caused the error.

    Error responses will also have a particular HTTP status code. In general,
    the `code` property of the error object should be used instead.

    ## Common codes
    These codes are returned by many or all Subsplash APIs.

    | Code               | HTTP status | Description                                                                                       |
    |--------------------|-------------|---------------------------------------------------------------------------------------------------|
    | internal           | 500         | Internal server error. A specific detail message is not provided for this code.                   |
    | not_found          | 404         | The requested path is not supported.                                                              |
    | resource_not_found | 404         | The path is valid, but the resource with the given ID doesn't exist.                              |
    | bad_request        | 400         | Generic bad request. Should usually be replaced with a more specific code.                        |
    | missing_value      | 422 or 400  | A required field in request JSON was not specified. HTTP status is being migrated to 422.         |
    | invalid_value      | 422 or 400  | A field does not meet validation requirements. HTTP status is being migrated to 422.              |
    | duplicate_resource | 409         | Returned when attempting to create a resource, and one already exists that somehow duplicates it. |
    | json_syntax        | 400         | The JSON syntax is invalid.                                                                       |
    | json_content       | 422         | The JSON is syntactically valid, but not what the endpoint is expecting.                          |
    | json               | 400         | Returned for JSON errors not related to syntax or content.                                        |
    | authentication     | 401         | The given token is invalid, probably because of an invalid signature or claim.                    |
    | no_auth_header     | 401         | The `Authorization` header was not provided, and is required.                                     |
    | invalid_token      | 401         | The token is not valid. Reasons include invalid format, invalid signature, and expiration.        |
    | authorization      | 403         | The given token does not contain claims that authorize the requested action.                      |
    | too_many_requests  | 429         | The request rate limit was exceeded.                                                              |

    ## Error examples

    ### Invalid fields in request body
    #### Request body
    ```json
    {
      "org_key": "ABC123", // too short
      "address": {
        "street": "124 Conch St.",
        "city": "Bikini Bottom",
        "state": "Pacific Ocean",
        "country": "US"
      }
    }
    ```
    #### Response
    ```json
    {
      "errors": [
        {
          "code": "invalid_value",
          "detail": "an org_key must be 8 characters",
          "source": {
            "pointer": "/org_key"
          }
        },
        {
          "code": "invalid_value",
          "detail": "Pacific Ocean is not a valid US state",
          "source": {
            "pointer": "/address/state"
          }
        }
      ]
    }
    ```

    ### Invalid query param
    #### Request
    ```
    GET /payments/v1/forms?filter[org_key]=SPONGEBOB_SQ_PANTS
    ````
    #### Response
    ```json
    {
      "errors": [
        {
          "code": "invalid_value",
          "detail": "the org_key is not valid and a little weird IMO",
          "source": {
            "parameter": "filter[org_key]"
          }
        }
      ]
    }
    ```
  name: Errors
- name: Event
- description: The events service provides data related to calendars and events.
  name: Events Service
- description: |
    Filters allow the consumer to fetch resources that satisfy a particular condition.
    Generally, filters can be applied to the attributes of a resource, but that isn't
    necessarily a rule. Filters currently only apply to [GetAll](#section/List)
    requests. Only one filter may be given for each filterable field.

    Only certain filters are allowed for each resource type. See the documentation
    for a resource type to see a list of available filters. Requests that include
    a disallowed filter will result in a `400 Bad Request` response containing an
    error message that indicates which filter is disallowed.

    **See also:** [JSON API recommendations on filtering](https://jsonapi.org/recommendations/#filtering)

    ## Format
    Filters are provided as URL parameters in the following format:

    ![](/_assets/filter_railroad.png)

    * `name`: The name of the filter, generally the field to filter on.
    * `operator`: An optional [comparison operator](#operators).
    * `value`: The value to filter against. Multiple values may be given in a comma-
    separated list.

    ## Values
    All values are provided as strings or comma-separated lists of strings. However,
    filters usually expect a value that can be converted into the JSON type of that
    field. So, an integer field expects a string containing only digits. A boolean
    field expects either `true` or `false`. A date-time field expects an RFC3339-
    formatted timestamp like `2017-05-23T15:35:57Z`. Certain filterable fields may
    support a value of `null`.

    ### Lists
    Multiple values may be provided for a filter by separating them with commas (`,`).
    Any of the given values will satisfy the filter. If a comma literal is desired within
    the filter value, it must be escaped (`\,`).

    ### Wildcards
    Certain string fields may support wildcards (represented by `*`) in filter values.
    These allow matching substrings. A `400 Bad Request` error will be returned if
    wildcards are not supported for a field.

    ## Comparison operators
    The default operator (nothing supplied) is `equals`. The other comparison
    operators are:
    * `!`: not
    * `<`: less than
    * `>`: greater than
    * `<%3D`: less than or equal to
    * `>%3D`: greater than or equal to

    Certain operators may only apply to certain data types. Note that the 'or equal to'
    operators must encode the `=` using url encoding to be able to differentiate it
    from the query arg key/val separators. Also the 'or equal to' operators are only
    supported on services running kit v3.57.0 or higher.

    ## Or Filters
    Multiple names or values may be provided for an or filter by separating them with
    vertical bars ('|').
    These allows matching by either one of names/values or another.
    Multiple names may be provided, fullfilling the condition to provide either one or
    the same number of values to the filter. A `400 Bad Request` error will be returned if
    number of values is not 1 or equal to the number of names in the filter.

    ## Filter examples
    * `/resources`: unfiltered or default filtered
    * `/resources?filter[foo]=bar`: return resources where the field `foo` equals `"bar"`
    * `/resources?filter[foo]=bar*`: return resources where the field `foo` begins
      with the substring `"bar"`
    * `/resources?filter[foo]=null`
    * `/resources?filter[foo]=<5`
    * `/resources?filter[foo]=bar,baz,qux`
    * `/resources?filter[foo]=2017-05-23T15:35:57Z`
    * `/resources?filter[foo|bar]=1`: return resources where the field `foo` equals 1 or
      where the field `bar` equals 1
    * `resources?filter[foo|bar]=1|2`: return resources where the field `foo` equals 1 or
      where the field `bar` equals 2
    * `resources?filter[foo|foo]=1|2`: return resources where the field `foo` equals either
      1 or 2
  name: Filters
- description: A fund is a way for clients to organize and group donations together.
    A fund (or sub-fund) can belong to a campus.
  name: Fund
  x-subsplash-sdk:
    resourceName: DonationFund
- description: |
    A [Group](#tag/Group) is a representation of a group composed of various [GroupMember](#tag/GroupMember)s
  name: Group
- description: |
    A [GroupMember](#tag/GroupMember) is individual member of a [Group](#tag/Group).
  name: GroupMember
- description: |
    A [GroupType](#tag/GroupType) is a custom type of [Group](#tag/Group).
  name: GroupType
- description: The Groups service provides data related to groups.
  name: Groups Service
- description: |
    The Household is a resource that represents a group of profiles in a family.
  name: Household
- description: |
    Resource endpoints may support the `include` query parameter to indicate
    which related resources should be included in the response.

    For example, given a resource of type `Foo` with an ID of `12345`, the
    resource may be accessed at `/v1/foos/12345`. If there is a resource of
    type `Bar` that is linked to the `Foo` resource, the endpoint _may_ allow
    requests to specify `include=bar` as a query parameter. The response to
    this request will include the `Bar` resource in the `_embedded` object
    under the key `bar`.

    Multiple includes are separated with commas (`include=bar,baz,qux`), and
    nested includes are specified with periods (`include=bar.baz.qux`).

    If a resource type is specified in an `include` parameter and no such
    resource exists, the response will be successful, but no related resource
    will be present in the `_embedded` object. It is the client's responsibility
    to verify that a resource was included before attempting to access its
    properties.

    **See also:** [JSON API on including related resources](https://jsonapi.org/format/#fetching-includes)
  name: Includes
- description: |
    A Payment Instrument models an external money account to transfer funds to and from. This can be a Credit Card, Debit Card, bank account for ACH payments, which can be owned by (linked/related to) an end user or an organization. An instrument must be related to either a Payment User or an Account (having both is an option in the future, but not supported).
  name: Instrument
- description: |
    The Subsplash API follows principles of RESTful API design. It is made up
    of many [_resources_](/#section/Resources) that support several standard
    [_actions_](/#tag/Standard-Actions).

    Data is usually encoded in JSON. A few parts of the [HAL spec]
    (http://stateless.co/hal_specification.html) are implemented, as well as
    some from [JSON API](https://jsonapi.org/format).
  name: Introduction
- name: Link
- name: List
- description: |
    List Rows are used to connect Lists to useful content. Each list row belongs to a list and either has a
    position in the list, or is hidden.

    The list rows of a 'standard' list may be manipulated using the standard actions, but list rows belonging
    to a 'dynamic' list are not true resources, so they don't have an id attribute and can only be retrieved
    in a collection that filters by a source list.
  name: ListRow
- description: The media service provides containers for audio, video, and more.
  name: Media Service
- name: MediaItem
  x-subsplash-sdk:
    generateEmbedder: true
- name: MediaSeries
- name: Notification
- description: The pages service provides a few random resources.
  name: Pages Service
- description: |
    **Page-based** pagination is the mechanism used to limit the number of resources
    in a response. This means that a collection of resources must be retrieved as a
    page, and that a page number may be provided to get resources beyond the initial
    page size.

    **See also:** [JSON API on pagination](https://jsonapi.org/format/#fetching-pagination)

    ## Pagination options
    There are two options available related to pagination: `size` and `number` (page
    numbers start at 1). These options
    are specified as URL parameters within `page[]` and each take an integer value.
    Each resource type has a default page size, which will be used if one is not
    specified. Each resource type *should* have a maximum page size. Requests that
    specify a page size greater than this value will receive a `400 Bad Request` with
    an [error](#tag/Errors) object that contains the maximum value.
    Omitting the page number is equivalent to requesting the first page.

    ### Examples
    * `/resources` returns the first page of N resources, where N is the default
      page size for the resource
    * `/resources?page[size]=25` returns the first 25 resources
    * `/resources?page[number]=3` returns the third page of N resources. As an
      offset, this can be seen as resource `((3-1)*N)+1` through `3*N`
    * `/resources?page[number]=4&page[size]=10` returns the fourth page of 10
      resources, which is the 31st through the 40th resource

    ## Fields
    Two useful fields that may appear in a resource collection are `count` and
    `total`:
    * `count` should be available for all resource types. Its value is the
    number of resources in the current page.
    * `total` is the total number of available resources across all pages,
    based on the specified [filters](#tag/Filters). It may or may not be available
    for a given resource type. Also, it may not be returned unless the
    `Collection-Total` header is set to `include`. If it's available by default
    it may be possible to disable with `Collection-Total: omit`. When not needed,
    it should be omitted.

    ## Links
    Each collection of resources in [HAL](#tag/Introduction) contains a `_links` object at the
    root-level. Within this object are between three and five link objects.

    The three that will always be present are:
    * `self`: a link to the current page
    * `first`: a link to the first page
    * `last`: a link to the last page

    When the total number of resources is less than the page size, `first` and
    `last` will both point to page 1.

    When the total number of resources is greater than the page size, the following
    links may be available:
    * `prev`: a link to the previous page (not available on the first page)
    * `next`: a link to the next page (not available on the last page)
  name: Pagination
- description: |
    A payment resource is a recorded transfer of money from one party to another via a payment instrument to an account. Payments go through several states to track their progress based on interactions with the payfac and the instrument's issuing company.
  name: Payment
- description: |
    A Payment Intent guides you through the process of collecting a payment from your customer. It tracks the customer's payment lifecycle, including any failed payments or automatic retries you need to make.
    When you create a Payment Intent, specify the amount of money to collect, the customer to charge, and the payment method to charge them with. After you create a Payment Intent, you can use it to collect a payment.

    For automatic capture (default), the payment is captured as soon as the customer completes the payment. For manual capture, set `manual_capture` to `true` when creating the Payment Intent; the client then confirms the payment (e.g. with Stripe.js), and you later capture the full authorized amount by calling POST `/payment-intents/{id}/capture`.
  name: PaymentIntent
- description: The payments service provides the functions needed for accepting, managing,
    & reporting payments and transactions between an end user and an organization.
  name: Payments Service
- description: The People service provides resources related to managing people.
  name: People Service
- description: A pledge is a promise to give a certain amount of money to a campaign.
  name: Pledge
- description: |
    The Profile is a resource that represents an organization's view of an EndUser. The data in this resource is owned by the client/organization, and edits are allowed by admins of the org.
  name: Profile
- description: |-
    The Push service is used to manage topics, manage user subscriptions to topics, and manage push notifications
    to topics or users.
  name: Push Service
- description: A recurring donation is a donation that is set to recur at a specific
    interval.
  name: RecurringDonation
- description: |
    A refund is a reversal of a payment that was previously created but not yet completely refunded. Funds are transferred back to the payment instrument that was originally charged. A refund is primarily performed on a payment via the giving dashboard from a client account.
  name: Refund
- name: RepeatingEvent
- description: |
    There are two kinds of resources: single and collection resources.

    ### Single resources
    A single resource is usually represented simply as a JSON object (`{}`)
    with some fields. Almost all single resources have `id`, `created_at`, and
    `updated_at` fields.

    #### Example
    ```json
    {
      "id": "64ca8ae1-2ed3-4ebd-ba8e-911394b4eb69"
      "foo": "bar",
      "created_at": "2019-09-02T16:38:21Z",
      "updated_at": "2019-09-04T23:39:05Z"
    }
    ```

    ### Collection resources
    Collection resources are objects containing an `_embedded` field that has
    one field named after the type of resource it contains. This field's value
    is an array of single resources. The collection resource may also have
    `count` and `total` fields, where `count` is the number of resources
    present in the array under `_embedded`, and `total` is the number of
    resources that would appear in that array if [pagination](/#tag/Pagination)
    were disregarded.

    #### Example
    ```json
    {
      "total": 45,
      "count": 3,
      "_embedded": {
        "foos": [
          {
            "id": "06002e59-8729-4af7-8dd6-1c8e9815ae3d"
          }, {
            "id": "3e6fc94e-88c9-445d-90c6-64b3d2612024"
          }, {
            "id": "2c6f2c45-a40d-4ec3-ae81-edba32c4bb94"
          }
        ]
      }
    }
    ```

    ### HAL
    Two parts of the HAL spec are implemented in this API: the `_links` and
    `_embedded` objects. `_links` and `_embedded` are special fields that may
    appear on any single or collection resource.

    `_links` contains named URLs related to the current resource. A `self`
    link is always included, which contains the URL of the current resource.
    Collection resources may also contain links to other pages of resources.
    The `_links` object may also contain URLs relevant to the resource, such
    as the location of a file or another way to access a resource.

    #### Example
    ```json
    {
      "_links": {
        "self": "https://core.subsplash.com/acme/v1/widgets/99c99dd0-021f-4662-9dbe-8bf0d480929c"
      },
      "id": "99c99dd0-021f-4662-9dbe-8bf0d480929c",
      "foo": "bar"
    }
    ```

    When `_embedded` is present on a _collection_ resource, it only contains an
    array field named after the type of resource being requested.

    #### Example
    See the example for **Collection resources** above.

    When `_embedded` is present on a _single_ resource, it contains other
    resources related to the current one. Which resources appear here may
    often be controlled via the [`include`](/#tag/Includes) parameter.

    #### Example
    ```json
    {
      "id": "99c99dd0-021f-4662-9dbe-8bf0d480929c"
      "foo": "bar",
      "_embedded": {
        "fidgets": [
          {
            "id": "bbab2cad-54af-492e-9752-5fff79b3d275",
            "baz": "qux"
          },
          {
            "id": "bbab2cad-54af-492e-9752-5fff79b3d275",
            "baz: "bar"
          }
        ],
        "gadget": {
          "id": "00fd3755-f6df-4230-9680-32f821eff0d2",
          "bar": "baz"
        }
      }
    }
    ```

    Notably, CURIEs are not implemented by this API.
  name: Resources
- description: |
    An attempt to send a message to a Webhook's endpoint_url corresponding
    to the occurrence of a subscribed event.
  name: SendAttempt
- description: |
    The Setup Intents API lets you save a customer's card without an initial payment. This is helpful if you want to onboard customers now, set them up for payments, and charge them in the future—when they're offline.

    Use this integration to set up recurring payments or to create one-time payments with a final amount determined later, often after the customer receives your service.
  name: SetupIntent
- description: |
    A SigningKey is a public and private key pair used to sign and validate
    tokens.

    Each SigningKey is valid for a certain period of time. There are always
    two valid signing keys at any given time.

    Each SigningKey has a field that indicate when tokens should no longer be
    generated with the key, and one that indicates when tokens should no longer
    validated with the key. These timestamps are separated by a sufficient
    amount of time to replace tokens signed with the old key with tokens signed
    with the new key.
  name: SigningKey
- description: |
    When requesting a collection of resources, sorting allows the consumer to specify
    the order in which resources are returned. Each resource type may have certain
    fields that can be sorted on, which probably (but not necessarily) correspond to
    fields of the resource. If a request specifies sort fields that are not allowed
    by the resource type, a `400 Bad Request` will be returned with a relevant
    [error](#tag/Errors) object.

    **See also:** [JSON API on sorting](https://jsonapi.org/format/#fetching-sorting)

    ## Sort options
    Sorts may be specified with the `sort` URL parameter. The value of `sort` is a
    comma-separated list of fields with directions.

    There are two directions for sorting: ascending and descending. To specify a
    direction, prepend the field name with `+` for ascending or `-` for descending.
    Ascending is the default, so it's fine to omit `+`.

    Omitting the `sort` option from a request may result in an unsorted response, or
    the resource type may have a default field and direction that it sorts on. This
    should be documented with the resource.

    ### Examples
    * `/resources`: unsorted or default sorted
    * `/resources?sort=created_at`: ascending `created_at` (oldest to newest)
    * `/resources?sort=+created_at`: same as above
    * `/resources?sort=-created_at,title`: descending `created_at` (newest to oldest),
      ascending `title` (a-z)
  name: Sorts
- description: |
    Some [GetOne](#section/Get-One) and [List](#section/List) endpoints may
    allow clients to specify which fields should be returned in the response.

    To do so, the client may specify a comma-separated list of fields in the
    `fields[TYPE]` query parameter, where `TYPE` should be the singular, snake_case
    name of the resource type.

    **See also:** [JSON API on sparse fieldsets](https://jsonapi.org/format/#fetching-sparse-fieldsets)
  name: Sparse Fieldsets
- description: |
    Most resources support some or all of the following actions:
    ## Get One
    Returns a single resource.

    ## List
    Returns a collection of resources.

    ## Create
    Creates a new resource.

    ## Update
    Updates an existing resource.

    ## Delete
    Deletes a resource.
  name: Standard Actions
- description: A Token defines the access a client has to the Subsplash APIs
  name: Token
  x-subsplash-sdk:
    ignore: true
- description: |-
    The Tokens service is a centralized place to handle basic client access info
    and the generation and signing of tokens for all clients including other
    services, third-party clients, and developers.

    Most actions to read and write data in this service can only be performed by
    Token Admins. Auth tokens may be requested by anyone with valid API Client
    credentials, and public signing keys may be accessed by anyone.
  name: Tokens Service
- name: Topic
- name: TopicSubscription
- description: |
    A webhook is a mechanism for sending real-time notifications or events
    from one application to another. It allows applications or services to
    communicate with each other by providing a way for one application to send
    data or trigger actions in another application.

    In a standard webhook setup, Subsplash will act as a sender, while your
    custom CRM or 3rd party system acts as a receiver. Subsplash will initiate
    an HTTPS request to a specific URL (known as the webhook endpoint)
    provided by the receiver application. This HTTPS request typically
    contains relevant data or information related to a specific event that
    occurred within the Subsplash Platform.

    When your custom CRM or 3rd party system receives the webhook request, it
    processes the data and can take various actions based on the provided
    information. This can include updating records, triggering workflows or
    business processes, sending notifications, or performing any other desired
    action.

    # Steps to Receive Webhooks
    You can start receiving event notifications by following these steps:

    1. Identify the events you want to monitor and the event payloads to
    parse.

    2. Create a webhook endpoint as an HTTP endpoint (URL) on your integration
    app.

    3. Configure a new Webhook with the event type and endpoint. Save the
    secret in your app's configuration.

    4. Set up request validation to ensure you only trust real Subsplash
    webhooks.

    5. Handle events by parsing each event object and returning 200 response
    status code.

    6. Test that your webhook endpoint is working properly locally.

    7. Deploy your webhook endpoint so it is a publicly internet accessible
    HTTPS URL.

    8. Update the config of your webhook to your production publicly
    accessible HTTPS URL.

    # Create a Webhook Endpoint
    Creating a webhook endpoint is as simple as creating a new HTTP endpoint
    on your integration app with a URL to receive events. You can use one
    endpoint to handle several different event types at once, or set up
    individual endpoints for specific events.

    ## Endpoint Requirements
    * HTTPS & TLS
      * During testing you may use a HTTP (non-TLS) endpoint. When you
      transition your integration to production, our webhooks will fail to
      send unless your server provides a HTTP endpoint.
    * Accept POST method
    * Return 2XX response status code
      * If the webhook sender receives a response status code in the 400 or
      500 range, the sending will be marked as a failure, and the retry logic
      will kick in.
    * Respond before timeout of 5 seconds
      * If your business logic takes longer than our stated timeout, please
      write your code to first persist the event information durably, respond
      to the webhook with a 200 status, and then process the event
      asynchronously.
    * Redirects permitted
      * Redirects are allowed (HTTP response status code in the 300 range),
      but count toward the overall timeout of 5 seconds.

    ## Message Format
    * Body
      * The body is a JSON object consisting of the following fields:
        * `id`: Unique identifier corresponding to this change
        * `event`: The event type. See below for the list of event types.
        * `before`: JSON object representing the state of the resource before the
          change. This field is only present for events that correspond to
          updates or deletions.
        * `after`: JSON object representing the state of the resource after the
          change. This field is only present for events that correspond to
          creations or updates.
      * Example:
        ```json
        {
          "id": "9ef4bb71-59e7-4c18-b3fc-133ceeae51cd",
          "event": "profile.update",
          "before": {
            "id": "167dc12b-8f05-4c77-a3f8-7eeafc09911d",
            "email": "test@example.com",
            "first_name": "John",
            "last_name": "Smith",
            "marital_status": "single",
            "created_at": "2023-09-21T18:44:36Z",
            "updated_at": "2023-09-21T18:44:36Z"
          },
          "after": {
            "id": "167dc12b-8f05-4c77-a3f8-7eeafc09911d",
            "email": "test@example.com",
            "first_name": "John",
            "last_name": "Smith",
            "marital_status": "married",
            "created_at": "2023-09-13T18:44:36Z",
            "updated_at": "2023-09-27T09:32:57Z"
          }
        }
        ```
    * Headers
      * `Content-Type`: application/json
      * `Webhook-Timestamp`: The Unix timestamp (in seconds) when the request
        was sent.
      * `Webhook-Signature`: Cryptographic signature of message. See [Request
        Validation](http://localhost:6063/#tag/Webhook/Create-a-Webhook-Endpoint/Request-Validation) for more
        information.

    ## Event Types
    | Event Type | API Docs | Description |
    | ---------- | -------- | ----------- |
    | donation.create | [Donation](#tag/Donation) | When a donation is created. |
    | profile.create | [Profile](#tag/Profile) | When a profile is created. |
    | profile.update | [Profile](#tag/Profile) | When a profile is updated. |
    | profile.delete | [Profile](#tag/Profile) | When a profile is deleted. |
    | end_user_login_event.create | [EndUserLoginEvent](#tag/EndUserLoginEvent) | When an end user logs in |
    | response.create | [Forms](#tag/Response) | When a forms response is created. |

    ## Timeouts
    The request timeout is 5 seconds. If that time elapses without a response,
    the message is marked as failed with a timeout error. Consider returning a
    successful response right away and processing the event in the background.

    ## Retry Logic
    When sending messages to your endpoint, we'll make up to 10 attempts to
    send a given message, with an increasing delay between each failed attempt.
    After all retries have been exhausted, we'll mark that message as failed
    and give up sending.

    ## Rate Limiting
    After you set up a webhook to start receiving events, you'll want to think
    through your requirements for how scale your endpoint to prevent webhooks
    from overloading your systems. The shape of traffic from our webhooks to
    your endpoint will directly correspond to the volume of changes that are
    made to your data in our system. Specific types of events and times of day
    can have significantly different throughput requirements, so be sure that
    your system can handle those peak throughput times.

    The HTTP 429 "Too Many Requests" response status code indicates the client
    has sent too many requests in a given amount of time. A Retry-After header
    might be included to this response indicating how long to wait before
    making a new request. If you endpoint implements, we'll try to honor this
    response if it falls within the allowed time for a single send attempt. If
    not, then we'll fail that attempt and try again in 60 seconds.

    ## Request Validation
    Webhooks are cryptographically signed so that the system receiving them
    can verify they came from Subsplash. This is done by producing an
    [HMAC](https://en.wikipedia.org/wiki/HMAC) and comparing it to the one
    given in the `Webhook-Signature` header.

    The HMAC's key is the Webhook's `secret`. Its message is the request body
    concatenated with the value of the `Webhook-Timestamp` header. This value
    is the Unix timestamp at which the webhook was sent. This value may be
    checked to ensure the webhook was sent recently, to prevent replay
    attacks.

    ### Request Validation Examples
    The following code snippets demonstrate how to verify a webhook signature
    and timestamp.

    #### Go
    ```go
    package main

    import (
        "crypto/hmac"
        "crypto/sha256"
        "encoding/base64"
        "io"
        "net/http"
    )

    // validWebhook reports if the request's signature is valid and that the
    // webhook was sent within the last minute.
    func validWebhook(secret string, req *http.Request) (bool, error) {
        ts, err := strconv.ParseInt(timestamp, 10, 64)
        if err != nil {
            return false, err
        }

        // Verify that the webhook was sent within the last 5 minutes.
        if time.Now().Sub(time.Unix(ts, 0)).Abs() > 5 * time.Minute {
            return false, nil
        }

        // Read the request body.
        body, err := io.ReadAll(req.Body)
        if err != nil {
            return false, err
        }

        timestamp := req.Header.Get("Webhook-Timestamp")

        // Create an HMAC using the secret as the key, and the request body
        // concatenated with the timestamp as the message.
        h := hmac.New(sha256.New, []byte(secret))
        h.Write(body)
        h.Write([]byte(timestamp))
        mac := h.Sum(nil)

        // Decode the base64 signature.
        sig, err := base64.StdEncoding.DecodeString(req.Header.Get("Webhook-Signature"))
        if err != nil {
            return false, err
        }

        // Compare the HMACs without leaking timing information.
        return hmac.Equal(sig, mac), nil
    }
    ```

    ### Secret rotation
    If your webhook secret is compromised or you'd like to proactively rotate
    it, you can do so by making a request to the [Rotate Webhook Secret](#tag/Webhook/operation/RotateWebhookSecret)
    endpoint. This may be done immediately or after a 24 hour delay, to give
    you time to update the secret in your system.
  name: Webhook
- description: The Webhooks Service
  name: Webhooks Service
x-tagGroups:
- name: General
  tags:
  - Introduction
  - API Integration Guide
  - Resources
  - Standard Actions
  - Authentication
  - Errors
  - Pagination
  - Filters
  - Sorts
  - Includes
  - Sparse Fieldsets
- name: Builder
  tags:
  - Builder Service
  - List
  - ListRow
- name: Donations
  tags:
  - Donations Service
  - Campaign
  - CampaignContributions
  - Donation
  - DonationTerminal
  - Fund
  - Pledge
  - RecurringDonation
- name: Events
  tags:
  - Events Service
  - Calendar
  - Event
  - RepeatingEvent
- name: Groups
  tags:
  - Groups Service
  - Group
  - GroupMember
  - GroupType
- name: Media
  tags:
  - Media Service
  - MediaItem
  - MediaSeries
- name: Pages
  tags:
  - Pages Service
  - Link
- name: Payments
  tags:
  - Payments Service
  - Instrument
  - Payment
  - PaymentIntent
  - Refund
  - SetupIntent
- name: People
  tags:
  - People Service
  - Household
  - Profile
- name: Push
  tags:
  - Push Service
  - Notification
  - Topic
  - TopicSubscription
- name: Tokens
  tags:
  - Tokens Service
  - SigningKey
  - Token
- name: Webhooks
  tags:
  - Webhooks Service
  - SendAttempt
  - Webhook
