NationBuilder Memberships API

A membership is a way to organize supporters and provide additional benefits based on actions they've taken or money donated. More information about memberships and the fields found in the UI and API interfaces can be found [here](https://support.nationbuilder.com/en/articles/2362753-set-up-memberships) By default, autoresponses when updating a membership are not triggered. Set the `trigger_autoresponses` param to `true` to trigger autoresponses on update.

Operations 5

POST /api/v2/memberships Create a membership #
GET /api/v2/memberships List all memberships in a nation #
GET /api/v2/memberships/{id} Show membership with provided ID #
PATCH /api/v2/memberships/{id} Update an existing membership #
DELETE /api/v2/memberships/{id} Delete membership with provided ID #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/nationbuilder-memberships-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

nationbuilder-memberships-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: NationBuilder V2 Memberships API
  version: '2.0'
  description: 'The NationBuilder V2 API is a JSON:API-compliant API for managing NationBuilder

    resources such as people, donations, events, and lists.'
servers:
- url: https://{subdomain}.nationbuilder.com
  variables:
    subdomain:
      default: yournation
      description: Your NationBuilder nation slug
security:
- BearerAuth: []
tags:
- name: Memberships
  x-tag-expanded: false
  description: 'A membership is a way to organize supporters and provide additional benefits based on actions they''ve taken or money donated.

    More information about memberships and the fields found in the UI and API interfaces can be found here


    By default, autoresponses when updating a membership are not triggered. Set the `trigger_autoresponses` param to `true` to trigger autoresponses on update.'
paths:
  /api/v2/memberships:
    parameters:
    - $ref: '#/components/parameters/membership_index_include'
    - $ref: '#/components/parameters/membership_sparse_fields'
    post:
      summary: Create a membership
      tags:
      - Memberships
      description: Creates a membership from given data
      operationId: createMembership
      responses:
        '201':
          description: The newly created membership.
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/membership_show_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '422':
          $ref: '#/components/responses/unprocessable'
        '429':
          $ref: '#/components/responses/rate_limited'
      requestBody:
        $ref: '#/components/requestBodies/membership_create_request_body'
    get:
      summary: List all memberships in a nation
      tags:
      - Memberships
      description: Lists all memberships
      operationId: listMemberships
      parameters:
      - $ref: '#/components/parameters/pagination_number'
      - $ref: '#/components/parameters/pagination_size'
      responses:
        '200':
          description: A page of matching memberships.
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/membership_index_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/rate_limited'
  /api/v2/memberships/{id}:
    parameters:
    - $ref: '#/components/parameters/id'
    - $ref: '#/components/parameters/membership_show_include'
    - $ref: '#/components/parameters/membership_sparse_fields'
    get:
      summary: Show membership with provided ID
      tags:
      - Memberships
      description: Returns the membership that matches the given ID.
      operationId: showMembership
      responses:
        '200':
          description: The requested membership.
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/membership_show_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/rate_limited'
    patch:
      summary: Update an existing membership
      tags:
      - Memberships
      description: Updates an existing membership
      operationId: updateMembership
      responses:
        '200':
          description: The updated membership.
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/membership_show_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable'
        '429':
          $ref: '#/components/responses/rate_limited'
      requestBody:
        $ref: '#/components/requestBodies/membership_update_request_body'
    delete:
      summary: Delete membership with provided ID
      tags:
      - Memberships
      description: Permanently removes the membership that matches the given ID.
      operationId: deleteMembership
      responses:
        '200':
          description: Confirmation that the membership was deleted.
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/delete_document'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/rate_limited'
components:
  schemas:
    index_document:
      description: The JSON:API top-level document shape for paginated collection responses, with resource objects under data and pagination links.
      type: object
      required:
      - data
      properties:
        data:
          type: array
          description: The page of resource objects for this collection; each resource binds its concrete item schema here via allOf composition.
        links:
          $ref: '#/components/schemas/pagination_links'
        included:
          $ref: '#/components/schemas/included'
        meta:
          type: object
          description: Non-standard information about the document, such as requested statistics. Empty unless the endpoint has metadata to convey.
    validation_error_document:
      description: The JSON:API errors document returned with status 422 when model validations fail on create or update. Unlike this API's flat 4xx error bodies, validation failures follow the JSON:API errors format.
      type: object
      required:
      - errors
      properties:
        errors:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/validation_error'
    membership_response_data:
      description: The JSON:API resource object representing a membership.
      allOf:
      - $ref: '#/components/schemas/resource_identifier'
      - type: object
        properties:
          type:
            const: memberships
            examples:
            - memberships
          attributes:
            allOf:
            - $ref: '#/components/schemas/membership_read_write_attributes'
            - $ref: '#/components/schemas/membership_read_only_attributes'
    membership_show_response:
      description: A JSON:API response containing a single membership.
      allOf:
      - $ref: '#/components/schemas/show_document'
      - type: object
        properties:
          data:
            $ref: '#/components/schemas/membership_response_data'
    resource_identifier:
      description: A JSON:API resource identifier object, the type/id pair that uniquely identifies a single resource.
      type: object
      required:
      - type
      - id
      properties:
        id:
          type: string
          description: Unique identifier of the resource.
          examples:
          - '1'
        type:
          type: string
          description: The JSON:API resource type.
    membership_sideload_values:
      description: Relationship names that can be sideloaded with the include query parameter on membership endpoints.
      type: string
      enum:
      - donations
      - membership_type
      - signup
    membership_update_request:
      description: The request body for updating an existing membership.
      allOf:
      - $ref: '#/components/schemas/update_request_document'
      - type: object
        properties:
          data:
            type: object
            properties:
              id:
                type: string
                examples:
                - '1'
              type:
                const: memberships
                examples:
                - memberships
              attributes:
                allOf:
                - $ref: '#/components/schemas/membership_read_write_attributes'
                - $ref: '#/components/schemas/membership_write_only_attributes'
    delete_document:
      examples:
      - meta: {}
      description: The successful destroy response, an empty JSON:API meta-only document returned with status 200 (rather than JSON:API's commonly used 204 No Content).
      type: object
      required:
      - meta
      additionalProperties: false
      properties:
        meta:
          examples:
          - {}
          type: object
          properties: {}
    error_response:
      description: The error body returned for 4xx and 5xx responses, with a machine-readable code and a human-readable message. Some errors include additional detail members alongside these two. The exception is 422 validation failures, which are returned as JSON:API errors documents instead.
      type: object
      required:
      - code
      - message
      properties:
        code:
          type: string
          description: Machine-readable error code identifying the failure.
          examples:
          - not_found
        message:
          type: string
          description: Human-readable explanation of the failure.
          examples:
          - Record not found
    pagination_links:
      description: JSON:API pagination links for the pages of a collection. A key whose page is unavailable, or that the server's pagination strategy does not provide, is omitted or null.
      type: object
      properties:
        self:
          type: string
          description: Link to the current page.
          examples:
          - /articles?page[number]=2
        first:
          type:
          - string
          - 'null'
          description: Link to the first page.
          examples:
          - /articles?page[number]=1
        last:
          type:
          - string
          - 'null'
          description: Link to the last page.
          examples:
          - /articles?page[number]=5
        prev:
          type:
          - string
          - 'null'
          description: Link to the previous page.
          examples:
          - /articles?page[number]=1
        next:
          type:
          - string
          - 'null'
          description: Link to the next page.
          examples:
          - /articles?page[number]=3
    rate_limited_response:
      description: The body returned by the rate limiter when an access token exceeds its request quota.
      type: object
      required:
      - message
      properties:
        message:
          type: string
          description: Human-readable explanation of the rate limit.
          examples:
          - You have made too many requests. Please try again later.
    update_request_document:
      description: The JSON:API top-level document shape for update requests, whose data member identifies the resource by type and id and carries the changed attributes.
      type: object
      required:
      - data
      properties:
        data:
          type: object
          required:
          - type
          - id
          properties:
            id:
              type: string
              description: The ID of the resource being updated.
            type:
              type: string
              description: The JSON:API resource type of the resource being updated.
    membership_read_only_attributes:
      description: The read-only attributes of a membership.
      type: object
      properties:
        created_at:
          type: string
          format: date-time
          examples:
          - '2019-10-26T10:00:00-04:00'
        suspended_at:
          type:
          - string
          - 'null'
          format: date
          examples:
          - '2022-10-11'
          description: When the membership was suspended.
        updated_at:
          type: string
          format: date-time
          examples:
          - '2019-10-26T10:00:00-04:00'
    included:
      description: Sideloaded resources requested via the include query parameter. Each entry is a full resource object whose shape is documented under its own resource type.
      type: array
      items:
        $ref: '#/components/schemas/resource'
    show_document:
      description: The JSON:API top-level document shape for responses returning a single resource under the data member.
      type: object
      required:
      - data
      properties:
        data:
          type: object
          description: The primary resource object; each resource binds its concrete schema here via allOf composition.
        included:
          $ref: '#/components/schemas/included'
        meta:
          type: object
          description: Non-standard information about the document. Empty unless the endpoint has metadata to convey.
    membership_index_response:
      description: A paginated JSON:API response containing a list of memberships.
      allOf:
      - $ref: '#/components/schemas/index_document'
      - type: object
        properties:
          data:
            type: array
            items:
              $ref: '#/components/schemas/membership_response_data'
    resource:
      description: A generic JSON:API resource object. Resources sideloaded in a document's included member use this shape; their attributes are those of the resource type named in the type member.
      allOf:
      - $ref: '#/components/schemas/resource_identifier'
      - type: object
        properties:
          attributes:
            type: object
            description: The attributes of the resource, as documented for its resource type.
          relationships:
            type: object
            description: References from this resource to other resources in the document.
    membership_read_write_attributes:
      description: The attributes of a membership that can be both read and written.
      type: object
      properties:
        expires_on:
          type:
          - string
          - 'null'
          format: date
          examples:
          - '2024-10-04'
          description: When the membership expires.
        grace_period_num_time_periods:
          type:
          - integer
          - 'null'
          examples:
          - 7
          description: Grace period to allow a signup to renew their membership after it expires.
        grace_period_time_period_type:
          type:
          - string
          - 'null'
          enum:
          - days
          - weeks
          - months
          - years
          - null
          examples:
          - days
          description: Unit of time to measure grace period.
        membership_type_id:
          type: string
          examples:
          - '1'
          description: The ID of the membership type.
        signup_id:
          type: string
          examples:
          - '1'
          description: The ID of the signup.
        started_at:
          type:
          - string
          - 'null'
          format: date-time
          examples:
          - '2019-10-26T10:00:00-04:00'
          description: When the membership went into effect.
        status:
          type:
          - string
          - 'null'
          enum:
          - active
          - canceled
          - expired
          - grace period
          - null
          examples:
          - active
          description: The membership status.
        status_reason:
          type:
          - string
          - 'null'
          examples:
          - Does not want to pay anymore
          description: Short text explaining why the membership is at its current status.
    membership_field_values:
      description: Readable membership attribute names selectable with sparse fieldsets (fields[memberships]).
      type: string
      enum:
      - created_at
      - expires_on
      - grace_period_num_time_periods
      - grace_period_time_period_type
      - membership_type_id
      - signup_id
      - started_at
      - status
      - status_reason
      - suspended_at
      - updated_at
    membership_create_request:
      description: The request body for creating a new membership.
      allOf:
      - $ref: '#/components/schemas/create_request_document'
      - type: object
        properties:
          data:
            type: object
            properties:
              type:
                const: memberships
                examples:
                - memberships
              attributes:
                allOf:
                - $ref: '#/components/schemas/membership_read_write_attributes'
                - $ref: '#/components/schemas/membership_write_only_attributes'
    membership_write_only_attributes:
      description: The write-only attributes of a membership.
      type: object
      properties:
        activity_author_id:
          type:
          - string
          - 'null'
          examples:
          - '1'
          description: Signup ID to be used as the author of the Activity log of this API action
        trigger_autoresponses:
          type:
          - boolean
          - 'null'
          default: false
          examples:
          - false
          description: Whether updating the membership status to be "expired" or "grace period" should result in an autoresponse being sent to the member. Defaults to false.
    create_request_document:
      description: The JSON:API top-level document shape for create requests, whose data member carries the new resource's type and attributes.
      type: object
      required:
      - data
      properties:
        data:
          type: object
          required:
          - type
          properties:
            type:
              type: string
              description: The JSON:API resource type of the resource being created.
    validation_error:
      description: A single JSON:API error object describing a validation failure, locating the invalid field via source.pointer and carrying the model-level attribute, message, and code under meta.
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code.
          examples:
          - unprocessable_entity
        status:
          type: string
          description: The HTTP status code, as a string.
          examples:
          - '422'
        title:
          type: string
          description: Short human-readable summary of the error type.
          examples:
          - Validation Error
        detail:
          type: string
          description: Human-readable explanation specific to this failure.
          examples:
          - Email 'not-an-email' should look like an email address
        source:
          type: object
          properties:
            pointer:
              type: string
              description: JSON Pointer to the request document member the error relates to.
              examples:
              - /data/attributes/email
        meta:
          type: object
          description: The underlying model validation error, including the attribute name, message, and code. Errors on sideposted resources nest these members under a relationship key.
          properties:
            attribute:
              type: string
              description: The attribute that failed validation.
            message:
              type: string
              description: The validation failure message.
            code:
              type: string
              description: The validation failure code.
  headers:
    RateLimit-Reset:
      description: Unix timestamp (in seconds) at which the current rate-limit window resets.
      schema:
        type: string
        examples:
        - '1719964810'
      examples: {}
    RateLimit-Limit:
      description: Maximum number of requests allowed for the current access token per rate-limit window (10 seconds).
      schema:
        type: string
        examples:
        - '250'
      examples: {}
    RateLimit-Remaining:
      description: Number of requests remaining for the current access token in the current rate-limit window.
      schema:
        type: string
        examples:
        - '249'
      examples: {}
    Retry-After:
      description: Number of seconds to wait before retrying. Sent with 429 responses.
      schema:
        type: string
        examples:
        - '10'
      examples: {}
  parameters:
    membership_show_include:
      name: include
      in: query
      description: 'Comma-delimited list of sideloaded resources to include as part of the membership response.

        See guidance [here](https://support.nationbuilder.com/en/articles/9899245-api-v2-walkthrough#h_2d5333adab) about

        sideloading large numbers of resources and pagination.

        '
      schema:
        type: array
        default: []
        uniqueItems: true
        items:
          $ref: '#/components/schemas/membership_sideload_values'
      required: false
      style: form
      explode: false
    membership_index_include:
      name: include
      in: query
      description: 'Comma-delimited list of sideloaded resources to include as part of the membership index response.

        See guidance [here](https://support.nationbuilder.com/en/articles/9899245-api-v2-walkthrough#h_2d5333adab) about

        sideloading large numbers of resources and pagination.

        '
      schema:
        type: array
        default: []
        uniqueItems: true
        items:
          $ref: '#/components/schemas/membership_sideload_values'
      required: false
      style: form
      explode: false
    pagination_number:
      name: page[number]
      description: Page number to list (starting at 1)
      in: query
      required: false
      schema:
        type: string
        default: '1'
    pagination_size:
      name: page[size]
      description: 'Number of results to display per page (default: 20, max: 100, min: 1)'
      in: query
      required: false
      schema:
        type: string
        default: '20'
    membership_sparse_fields:
      name: fields[memberships]
      in: query
      required: false
      description: Comma-delimited list of membership attributes to only return in the response
      schema:
        type: array
        default: []
        uniqueItems: true
        items:
          $ref: '#/components/schemas/membership_field_values'
      style: form
      explode: false
    id:
      name: id
      in: path
      description: id
      required: true
      schema:
        type: string
  responses:
    not_found:
      description: No resource exists with the provided ID.
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/json:
          example:
            code: not_found
            message: Record not found
          schema:
            $ref: '#/components/schemas/error_response'
    unauthorized:
      description: The access token is missing, expired, or not authorized to access this resource.
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/json:
          example:
            code: unauthorized
            message: You are not authorized to access this content. Your access token may be missing. The resource owner also may not have a permission level sufficient to grant access.
          schema:
            $ref: '#/components/schemas/error_response'
    rate_limited:
      description: The access token has exceeded its request quota for the current rate-limit window.
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          example:
            message: You have made too many requests. Please try again later.
          schema:
            $ref: '#/components/schemas/rate_limited_response'
    bad_request:
      description: The request body or query parameters are invalid, such as an unknown attribute, filter, filter operator, sort field, or sideload.
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/json:
          example:
            code: bad_request
            message: Tried to filter on attribute :bogus, but could not find an attribute with that name.
          schema:
            $ref: '#/components/schemas/error_response'
    unprocessable:
      description: Model validations failed for the resource being created or updated. Unlike this API's other errors, validation failures are returned as a JSON:API errors document locating each invalid field.
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
      content:
        application/vnd.api+json:
          example:
            errors:
            - code: unprocessable_entity
              status: '422'
              title: Validation Error
              detail: Email 'not-an-email' should look like an email address
              source:
                pointer: /data/attributes/email
              meta:
                attribute: email
                message: '''not-an-email'' should look like an email address'
          schema:
            $ref: '#/components/schemas/validation_error_document'
  requestBodies:
    membership_update_request_body:
      description: The attributes to update on the existing membership.
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/membership_update_request'
        application/json:
          schema:
            $ref: '#/components/schemas/membership_update_request'
    membership_create_request_body:
      description: The membership to create.
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/membership_create_request'
        application/json:
          schema:
            $ref: '#/components/schemas/membership_create_request'
  securitySchemes:
    BearerAuth:
      description: Authentication using a bearer token (JWT) issued via OAuth.
      type: http
      scheme: bearer
      bearerFormat: JWT
externalDocs:
  description: Get started with the NationBuilder API
  url: https://nationbuilder.com/api_quickstart