openapi: 3.0.0
info:
title: Chariot API
version: "v1"
description: The Chariot REST API. Please see https://docs.givechariot.com/api for more details.
contact:
name: Chariot Development Team
url: https://givechariot.com/contact
email: developers@givechariot.com
termsOfService: https://givechariot.com/legal-nonprofit
servers:
- url: https://sandboxapi.givechariot.com
description: Sandbox
- url: https://api.givechariot.com
description: Production
paths:
/v1/organizations/search:
get:
summary: Search organizations
description: |-
Search for organizations by name or EIN.
This endpoint exists to support a typeahead search or quick lookup by nonprofit EIN or name.
The Get Organization API should be used to retrieve detailed information about an organization.
operationId: searchOrganizations
tags:
- Organizations
security:
- bearerAuth: []
parameters:
- name: q
in: query
required: true
description: |-
The query string to search for. If this is in the format of an EIN, the search will be limited exclusively to the organization with that EIN. Otherwise, this will be a fuzzy search on organization name.
schema:
type: string
- name: ein
in: query
description: |-
The Employer Identification Number (EIN) or TaxID for the nonprofit entity. This is deprecated in favor of the `q` parameter.
schema:
type: string
deprecated: true
- name: name
in: query
description: |-
The name of the organization. This is deprecated in favor of the `q` parameter.
schema:
type: string
deprecated: true
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 20 objects.
required: false
schema:
type: integer
format: int32
responses:
"200":
$ref: "#/components/responses/SearchOrganizationsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/organizations/{id}:
get:
summary: Get organization
description: |-
Retrieves the organization with the given ID.
operationId: getOrganization
tags:
- Organizations
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the organization
schema:
type: string
required: true
example: "org_1LaXpKGUcADgqoEMl0Cx0Ygg"
responses:
"200":
description: "OK"
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/Organization"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/simulations/organizations/onboard/{id}:
post:
summary: "Sandbox: Onboard an organization"
description: |
Creates a Chariot account for a sandbox recipient organization so that
disbursements to it settle electronically instead of via a mailed check.
By default a sandbox organization has no Chariot account, so disbursements
to it are mailed as a physical check. Call this endpoint to provision an
account for the organization and choose which electronic rail its
disbursements should settle on.
The `settlement` is fixed on the first successful call. Onboarding the same
organization again with a different `settlement` returns an error.
This API is only available in the sandbox environment.
operationId: onboardOrganization
tags:
- Organizations
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the organization to onboard.
required: true
schema:
type: string
example: "org_1LaXpKGUcADgqoEMl0Cx0Ygg"
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- settlement
properties:
settlement:
$ref: "#/components/schemas/SandboxSettlement"
responses:
"200":
description: "OK"
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/Organization"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/programs:
get:
summary: List Programs
description: |-
Returns a list of all programs for your Chariot account.
operationId: list-programs
tags:
- Programs
security:
- bearerAuth: []
parameters:
- name: limit
in: query
description: Number of results per page. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: cursor
in: query
description: |-
Cursor token for pagination. Use the next_page_token from the previous response to retrieve the next page of results.
required: false
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListProgramsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/programs/{id}:
get:
summary: Get Program
description: |-
Retrieves the program with the given ID.
operationId: get-program
tags:
- Programs
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the program
schema:
type: string
required: true
example: "program_01j8rs605a4gctmbm58d87mvsj"
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/Program"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/connects:
post:
summary: Create Connect
description: |-
Get an existing connect or create a new connect for an existing nonprofit organization.
The returned Connect can be used to integrate the client-side Chariot Connect component using the `id` property (CID) and also query for data generated from the Chariot Connect instance using the connect_id query parameter in any of the List Grants API endpoints.
Only one Connect object can be created per organization.
If one already exists, this will return a `200 OK` status with the existing object.
operationId: create-connect
tags:
- Connects
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/CreateConnectRequest"
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
Location:
$ref: "#/components/headers/Location"
content:
application/json:
schema:
$ref: "#/components/schemas/Connect"
examples:
Simple:
$ref: "#/components/examples/ConnectOutput"
"201":
description: Created
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
Location:
$ref: "#/components/headers/Location"
content:
application/json:
schema:
$ref: "#/components/schemas/Connect"
examples:
Simple:
$ref: "#/components/examples/ConnectOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/connects/{id}:
get:
summary: Get Connect
description: |-
Retrieve a connect with the given ID.
operationId: get-connect
tags:
- Connects
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: the unique id of the connect
schema:
type: string
required: true
example: live_xJd0lUrvpDkzeGBWZbuI2wbvEdM
responses:
"200":
description: "OK"
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/Connect"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/grants:
get:
summary: List Grants
description: |-
Returns a list of all grants for a given Connect. This API allows for paginating over many results.
DAF providers can use `donor_account_id` to filter Grant Requests associated with a specific [Donor Account](/api/donor-accounts).
operationId: list-grants
tags:
- Grants
security:
- bearerAuth: []
parameters:
- name: connect_id
in: query
description: the `id` of the Connect object. This can be used to filter the grants by a specific Connect if you have more than one.
schema:
type: string
required: false
example: "live_2d821da0ed8bc7256e260f4eb5244f2d8f06c576342f922ba2f0a416d8c98002"
- name: donor_account_id
in: query
description: |-
Filter grants by a specific [Donor Account](/api/donor-accounts). Use this to retrieve all Grant Requests associated with a given donor.
schema:
type: string
required: false
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
- name: pageLimit
in: query
description: the number of results to return; defaults to 10, max is 100
schema:
type: integer
default: 10
- name: pageToken
in: query
description: |-
A token to use to retrieve the next page of results. This is useful for paginating over many pages of results. If set, all other arguments are expected to be kept the same as previous calls and the value of this field should be from the nextPageToken in the previous response.
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListGrantsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
post:
summary: Create Grant
description: |-
Create and submit a new grant. This should be used to capture a grant intent from an authorized DAFpay workflow session and submit the grant request to the DAF sponsor.
On initial creation of the grant, this request will return a 201 Created status. On subsequent requests, the request will return status 200 OK.
Error handling:
- The grant must be captured within 15 minutes of authorization otherwise the request will return status `410 Gone`.
- If this request is submitted while this grant is already being processed, the request will return status `409 Conflict`.
- The amount must be in whole dollar increments (rounded to the nearest hundred) as currently DAFs only accept whole dollar grants otherwise the request will return status `400 Bad Request`.
- The amount must be greater than or equal to the minimum grant amount for the DAF otherwise the request will return status `400 Bad Request`.
- The amount must be less than or equal to the user's DAF account balance otherwise the request will return status `400 Bad Request`.
- Any inputs exceeding the maximum allowed length will be automatically truncated.
operationId: create-grant
tags:
- Grants
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/GrantCaptureRequest"
responses:
"201":
description: Created
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
Location:
description: The URI reference of the created grant object.
schema:
type: string
format: uri
content:
application/json:
schema:
$ref: "#/components/schemas/Grant"
examples:
Simple:
$ref: "#/components/examples/GrantOutput"
"200":
description: The grant
content:
application/json:
schema:
$ref: "#/components/schemas/Grant"
examples:
Simple:
$ref: "#/components/examples/GrantOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"409":
$ref: "#/components/responses/ConflictError"
"410":
$ref: "#/components/responses/GoneError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/grants/{id}:
get:
summary: Get Grant
description: |-
Retrieve a grant with the given ID.
operationId: get-grant
tags:
- Grants
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: |-
The unique id of the grant.
The format should be a v4 UUID according to RFC 4122.
schema:
type: string
format: uuid
required: true
example: 10229488-08d2-4629-b70c-a2f4f4d25344
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/Grant"
examples:
Simple:
$ref: "#/components/examples/GrantOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/recurring_grants:
get:
summary: List Recurring Grants
description: |-
Returns a list of all recurring grants for a given Connect. This API allows for paginating over many results.
operationId: list-recurring-grants
tags:
- recurring_grants
security:
- bearerAuth: []
parameters:
- name: connect_id
in: query
description: the `id` of the Connect object. This can be used to filter the recurring grants by a specific Connect if you have more than one.
schema:
type: string
required: false
example: "live_2d821da0ed8bc7256e260f4eb5244f2d8f06c576342f922ba2f0a416d8c98002"
- name: pageLimit
in: query
description: the number of results to return; defaults to 10, max is 100
schema:
type: integer
default: 10
- name: pageToken
in: query
description: |-
A token to use to retrieve the next page of results. This is useful for paginating over many pages of results. If set, all other arguments are expected to be kept the same as previous calls and the value of this field should be from the nextPageToken in the previous response.
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListRecurringGrantsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
post:
summary: Create Recurring Grant
description: |-
Create and submit a new recurring grant. This should be used to capture a recurring grant intent from an authorized DAFpay workflow session and submit the recurring grant request to the DAF sponsor.
Error handling:
- The recurring grant must be captured within 15 minutes of authorization otherwise the request will return status `410 Gone`.
- A recurring grant can only be captured once from any given workflow session so any duplicate requests will return status `409 Conflict`.
- The amount must be in whole dollar increments (rounded to the nearest hundred) as currently DAFs only accept whole dollar grants otherwise the request will return status `400 Bad Request`.
- The amount must be greater than or equal to the minimum grant amount for the DAF otherwise the request will return status `400 Bad Request`.
- The amount must be less than or equal to the user's DAF account balance otherwise the request will return status `400 Bad Request`.
- Any inputs exceeding the maximum allowed length will be automatically truncated unless otherwise stated.
operationId: create-recurring-grant
tags:
- recurring_grants
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/RecurringGrantCaptureRequest"
responses:
"201":
description: Created recurring grant
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
Location:
description: The URI reference of the created recurring grant object.
schema:
type: string
format: uri
content:
application/json:
schema:
$ref: "#/components/schemas/RecurringGrant"
examples:
Simple:
$ref: "#/components/examples/RecurringGrantOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"409":
$ref: "#/components/responses/ConflictError"
"410":
$ref: "#/components/responses/GoneError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/recurring_grants/{id}:
get:
summary: Get Recurring Grant
description: |-
Retrieve a recurring grant with a given ID.
operationId: get-recurring-grant
tags:
- recurring_grants
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: |-
The unique id of the recurring grant.
The format should be a v4 UUID according to RFC 4122.
schema:
type: string
format: uuid
required: true
example: 10229488-08d2-4629-b70c-a2f4f4d25344
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/RecurringGrant"
examples:
Simple:
$ref: "#/components/examples/RecurringGrantOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/unintegrated_grants:
get:
summary: List Unintegrated Grants
description: |-
Returns a list of all unintegrated grants for a given Connect. This API allows for paginating over many results.
operationId: list-unintegrated-grants
tags:
- unintegrated_grants
security:
- bearerAuth: []
parameters:
- name: connect_id
in: query
description: the `id` of the Connect object. This can be used to filter the unintegrated grants by a specific Connect if you have more than one.
schema:
type: string
required: false
example: "live_2d821da0ed8bc7256e260f4eb5244f2d8f06c576342f922ba2f0a416d8c98002"
- name: pageLimit
in: query
description: the number of results to return; defaults to 10, max is 100
schema:
type: integer
default: 10
- name: pageToken
in: query
description: |-
A token to use to retrieve the next page of results. This is useful for paginating over many pages of results. If set, all other arguments are expected to be kept the same as previous calls and the value of this field should be from the nextPageToken in the previous response.
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListUnintegratedGrantsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/unintegrated_grants/{id}:
get:
summary: Get Unintegrated Grant
description: |-
Retrieve an unintegrated grant with a given ID.
operationId: get-unintegrated-grant
tags:
- unintegrated_grants
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: |-
The unique id of the unintegrated grant.
The format should be a v4 UUID according to RFC 4122.
schema:
type: string
format: uuid
required: true
example: 10229488-08d2-4629-b70c-a2f4f4d25344
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/UnintegratedGrant"
examples:
Simple:
$ref: "#/components/examples/UnintegratedGrantOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/dafs:
get:
summary: List Donor Advised Funds
description: |-
Returns a list of all Donor Advised Funds within Chariot's system. This API allows for paginating over many results.
If there are DAFs missing from the list, please contact support at support@givechariot.com.
operationId: list-dafs
tags:
- Donor Advised Funds
security:
- bearerAuth: []
parameters:
- name: supportedOnly
in: query
description: |-
If set to true, filters DAFs to only those that have a direct integration with Chariot.
schema:
type: boolean
default: false
- name: query
in: query
description: |-
If included, filters DAFs to only those that contain the query. This parameter is case insensitive.
schema:
type: string
- name: pageLimit
in: query
description: the number of results to return; defaults to 10, max is 100
schema:
type: integer
default: 10
- name: pageToken
in: query
description: |-
A token to use to retrieve the next page of results. This is useful for paginating over many pages of results. If set, all other arguments are expected to be kept the same as previous calls.
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListDafsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/dafs/{id}:
get:
summary: Get Donor Advised Fund
description: |-
Retrieve a DAF with a given ID.
operationId: get-daf
tags:
- Donor Advised Funds
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: |-
The unique id of the DAF.
The format should be a v4 UUID according to RFC 4122.
schema:
type: string
format: uuid
required: true
example: f9e28217-e0f7-4a54-9764-d664ffb10722
responses:
"200":
description: "OK"
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/Daf"
examples:
Npt:
$ref: "#/components/examples/DafOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/donor_accounts:
post:
summary: Create Donor Account
description: |-
Create a new Donor Account.
This endpoint is intended for DAF providers who want to set up a Donor Account on behalf of a donor before that donor uses DAFpay for the first time.
See the [DAF-Initiated Setup guide](/guides/dafpay/donor-accounts/daf-initiated-setup) for the most common use of this endpoint.
On creation, the Donor Account is placed in `pending` status. To make the account immediately usable for grant submissions, follow up with [Create Authorization Token](/api/donor-accounts/create-authorization-token) and provide the resulting code to the donor — when the donor enters the code in DAFpay, the Donor Account is automatically approved.
operationId: create-donor-account
tags:
- Donor Accounts
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/CreateDonorAccountRequest"
responses:
"201":
description: Created
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
Location:
description: The URI reference of the created donor account.
schema:
type: string
format: uri
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAccount"
examples:
Simple:
$ref: "#/components/examples/DonorAccountOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"409":
$ref: "#/components/responses/ConflictError"
"500":
$ref: "#/components/responses/InternalServerError"
get:
summary: List Donor Accounts
description: |-
Returns a list of Donor Accounts for the authenticated DAF.
This endpoint supports cursor-based pagination as well as filtering by fund, status, and email.
operationId: list-donor-accounts
tags:
- Donor Accounts
security:
- bearerAuth: []
parameters:
- name: giving_pool_id
in: query
description: |-
The `id` of a [Giving Pool](/api/giving-pools). When set, filters Donor Accounts to those that have this Giving Pool associated with them.
schema:
type: string
required: false
example: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
- name: status
in: query
description: |-
Filter Donor Accounts to only those with the specified status.
schema:
$ref: "#/components/schemas/DonorAccountStatus"
required: false
- name: email
in: query
description: |-
Filter Donor Accounts by donor email. The match is case insensitive and exact.
schema:
type: string
required: false
example: "warrenBuffet@example.com"
- name: external_id
in: query
description: |-
Filter Donor Accounts by `external_id` — the DAF's internal identifier for the Donor Account.
schema:
type: string
required: false
- name: page_limit
in: query
description: the number of results to return; defaults to 10, max is 100
schema:
type: integer
default: 10
- name: page_token
in: query
description: |-
A token to use to retrieve the next page of results. This is useful for paginating over many pages of results. If set, all other arguments are expected to be kept the same as previous calls and the value of this field should be from the next_page_token in the previous response.
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListDonorAccountsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/donor_accounts/{id}:
get:
summary: Get Donor Account
description: |-
Retrieve a Donor Account with the given ID.
operationId: get-donor-account
tags:
- Donor Accounts
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: |-
The unique id of the Donor Account.
schema:
type: string
required: true
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAccount"
examples:
Simple:
$ref: "#/components/examples/DonorAccountOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
patch:
summary: Update Donor Account
description: |-
Update mutable properties on a Donor Account such as `external_id`, the nested `donor` fields, and `metadata`.
The Donor Account's status is managed automatically through the Authorization Token verification flow and cannot be changed directly via this endpoint.
operationId: update-donor-account
tags:
- Donor Accounts
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique id of the Donor Account
schema:
type: string
required: true
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
requestBody:
$ref: "#/components/requestBodies/UpdateDonorAccountRequest"
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAccount"
examples:
Simple:
$ref: "#/components/examples/DonorAccountOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/donor_accounts/{id}/disable:
post:
summary: Disable Donor Account
description: |-
Disable an approved Donor Account.
A disabled Donor Account remains `approved` but cannot submit new Grant Requests. Existing Grant Requests already in flight are unaffected — disabling does not retroactively cancel or reject prior activity. Use this when a DAF needs to temporarily prevent a donor from initiating new grants (e.g. account under review, donor offboarding) without rejecting the underlying identity verification.
This endpoint is idempotent — calling it on an already-disabled account returns the Donor Account unchanged.
- The Donor Account must be in `approved` status. Calls on a `pending` or `rejected` account return status `409 Conflict`.
operationId: disable-donor-account
tags:
- Donor Accounts
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique id of the Donor Account.
schema:
type: string
required: true
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
responses:
"200":
description: The Donor Account was disabled (or was already disabled).
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAccount"
examples:
Disabled:
$ref: "#/components/examples/DonorAccountDisabledOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"409":
$ref: "#/components/responses/ConflictError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/donor_accounts/{id}/enable:
post:
summary: Enable Donor Account
description: |-
Re-enable a previously disabled Donor Account. After this call, the Donor Account can submit new Grant Requests again.
This endpoint is idempotent — calling it on an account that is already enabled returns the Donor Account unchanged.
- The Donor Account must be in `approved` status. Calls on a `pending` or `rejected` account return status `409 Conflict`.
operationId: enable-donor-account
tags:
- Donor Accounts
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique id of the Donor Account.
schema:
type: string
required: true
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
responses:
"200":
description: The Donor Account was enabled (or was already enabled).
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAccount"
examples:
Enabled:
$ref: "#/components/examples/DonorAccountEnabledOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"409":
$ref: "#/components/responses/ConflictError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/donor_accounts/{id}/authorization_tokens:
post:
summary: Create Authorization Token
description: |-
Create a single-use Authorization Token bound to a Donor Account.
Authorization Tokens are the binding credential used to verify a donor's identity between DAFpay and the DAF.
They are used in two distinct flows:
- **DAF-Initiated Setup**: The DAF creates a Donor Account and then creates an Authorization Token. The DAF surfaces the token's `code` to the donor via their portal. The donor enters the `code` into DAFpay during profile setup, automatically approving the Donor Account.
- **Donor-Initiated Verification**: After a donor submits a Grant Request, DAFpay automatically issues an Authorization Token and emails the `code` to the donor. The donor provides the `code` to the DAF (e.g. via a portal form or phone call). The DAF then calls [Verify Authorization Token](/api/authorization-tokens/verify) with the `code` to verify and approve the linked Donor Account.
Tokens expire **30 days** after creation by default. Override the lifetime by passing `expires_in` (seconds) on the request body — supported range is 60 seconds to 90 days. Once a token expires it transitions to `expired` and can no longer be verified; create a new token to issue a fresh code.
The token's `code` value is **only returned once** in this response. Treat it as a credential — store it securely and never log it. If the code is lost before being verified, [revoke](/api/authorization-tokens/revoke) the token and create a new one.
operationId: create-authorization-token
tags:
- Authorization Tokens
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique id of the Donor Account
schema:
type: string
required: true
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
requestBody:
$ref: "#/components/requestBodies/CreateDonorAuthorizationTokenRequest"
responses:
"201":
description: Created
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
Location:
description: The URI reference of the created authorization token.
schema:
type: string
format: uri
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAuthorizationToken"
examples:
Created:
$ref: "#/components/examples/DonorAuthorizationTokenCreatedOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
get:
summary: List Authorization Tokens
description: |-
List Authorization Tokens for a Donor Account.
Token codes are never returned by this endpoint — only the metadata is returned.
operationId: list-authorization-tokens
tags:
- Authorization Tokens
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique id of the Donor Account
schema:
type: string
required: true
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
- name: status
in: query
description: Filter tokens by status.
schema:
$ref: "#/components/schemas/DonorAuthorizationTokenStatus"
required: false
- name: page_limit
in: query
description: the number of results to return; defaults to 10, max is 100
schema:
type: integer
default: 10
- name: page_token
in: query
description: A cursor for paginating; pass the value from `next_page_token` of the previous response.
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListDonorAuthorizationTokensResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/authorization_tokens/{id}:
get:
summary: Get Authorization Token
description: |-
Retrieve an Authorization Token with the given ID.
The token's `code` is never returned — only the metadata is returned.
operationId: get-authorization-token
tags:
- Authorization Tokens
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique id of the Authorization Token
schema:
type: string
required: true
example: "auth_token_01jpjenf5q6cawy43yxfcrxhct"
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAuthorizationToken"
examples:
Simple:
$ref: "#/components/examples/DonorAuthorizationTokenOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/authorization_tokens/{id}/revoke:
post:
summary: Revoke Authorization Token
description: |-
Revoke an unverified Authorization Token. Once revoked, the `code` can no longer be verified.
Tokens that have already been verified or expired cannot be revoked and will return status `412 Precondition Failed`.
operationId: revoke-authorization-token
tags:
- Authorization Tokens
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique id of the Authorization Token
schema:
type: string
required: true
example: "auth_token_01jpjenf5q6cawy43yxfcrxhct"
responses:
"200":
description: The token was revoked
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAuthorizationToken"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"412":
$ref: "#/components/responses/PreconditionFailedError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/authorization_tokens/verify:
post:
summary: Verify Authorization Token
description: |-
Verify an Authorization Token by its `code` value.
This endpoint is used by DAFs in the **Donor-Initiated Verification** flow: when a donor presents the `code` they received from DAFpay (via email after submitting a Grant Request), the DAF calls this endpoint with the `code` to confirm the donor's identity.
On success:
- The Authorization Token transitions to `verified`.
- The linked Donor Account is automatically transitioned to `approved` if it is currently `pending`.
- The full Donor Account is returned (including the `id` you can use to call subsequent endpoints).
Codes are only valid until the token's `expires_at` — **30 days** after creation by default (configurable via `expires_in` on [Create Authorization Token](/api/authorization-tokens/create), 60 seconds to 90 days). After that point, the token's status becomes `expired` and verification will fail. If the donor's code has expired, prompt them to submit a new Grant Request — DAFpay will issue and email a fresh code automatically.
Error handling:
- If the `code` is unknown, expired, revoked, or already verified, the request will return status `404 Not Found` or `410 Gone` to avoid leaking information about valid codes. Expired codes are intentionally indistinguishable from other invalid codes in the response — surface a generic "code is invalid or has expired" message to the donor and ask them to request a new code.
- If the linked Donor Account has already been rejected, the request will return status `409 Conflict`.
- To prevent brute-force attacks, this endpoint enforces strict per-DAF rate limits. Repeated failures will return status `429 Too Many Requests`.
operationId: verify-authorization-token
tags:
- Authorization Tokens
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/VerifyDonorAuthorizationTokenRequest"
responses:
"200":
description: The token was successfully verified and the Donor Account was approved.
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/DonorAccount"
examples:
Verified:
$ref: "#/components/examples/DonorAccountApprovedOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"409":
$ref: "#/components/responses/ConflictError"
"410":
$ref: "#/components/responses/GoneError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/giving_pools:
get:
summary: List Giving Pools
description: |-
Returns a list of Giving Pools accessible to the authenticated DAF account.
Giving Pools represent individual named giving pools within a donor's DAF account (e.g. "Smith Family Fund").
A [Donor Account](/api/donor-accounts) may be associated with multiple Giving Pools.
operationId: list-funds
tags:
- Giving Pools
security:
- bearerAuth: []
parameters:
- name: donor_account_id
in: query
description: Filter Giving Pools by the ID of the associated [Donor Account](/api/donor-accounts).
required: false
schema:
type: string
- name: page_limit
in: query
description: The number of results to return. Defaults to 10, max is 100.
required: false
schema:
type: integer
default: 10
- name: page_token
in: query
description: A token to retrieve the next page of results.
required: false
schema:
type: string
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/GivingPool"
next_page_token:
type: string
description: A token to retrieve the next page of results. Absent when there are no more results.
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/giving_pools/{id}:
get:
summary: Get Giving Pool
description: |-
Retrieve a Giving Pool with the given ID.
operationId: get-fund
tags:
- Giving Pools
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique ID of the Giving Pool.
schema:
type: string
format: uuid
required: true
example: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/GivingPool"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/grant_requests:
get:
summary: List Grant Requests
description: |-
Returns a list of Grant Requests accessible to the authenticated DAF account.
Use `donor_account_id` to retrieve all Grant Requests associated with a specific donor.
operationId: list-grant-requests
tags:
- Grant Requests
security:
- bearerAuth: []
parameters:
- name: donor_account_id
in: query
description: Filter Grant Requests by the ID of the associated [Donor Account](/api/donor-accounts).
required: false
schema:
type: string
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
- name: page_limit
in: query
description: The number of results to return. Defaults to 10, max is 100.
required: false
schema:
type: integer
default: 10
- name: page_token
in: query
description: A token to retrieve the next page of results.
required: false
schema:
type: string
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/GrantRequest"
next_page_token:
type: string
description: A token to retrieve the next page of results. Absent when there are no more results.
examples:
MixedStatuses:
summary: A page of Grant Requests across statuses
value:
results:
- id: "grant_req_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
giving_pool_id: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
status: "pending"
ein: "53-0196605"
nonprofit_name: "American Red Cross"
amount_cents: 10000
frequency: "one_time"
form_url: "https://example.org/donate"
purpose: "Disaster relief"
note: "Thank you for your service."
donor_contact:
name: "Warren Buffet"
email: "warrenBuffet@example.com"
phone: "+12125550100"
address:
line1: "3555 Farnam Street"
line2: null
city: "Omaha"
state: "NE"
zip: "68131"
rejection_reason: null
created_at: "2026-04-03T14:22:00Z"
updated_at: "2026-04-03T14:22:00Z"
- id: "grant_req_01jpjenf5q6cawy43yxfcrxhcu"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
giving_pool_id: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
status: "submitted"
ein: "13-1635294"
nonprofit_name: "World Wildlife Fund"
amount_cents: 25000
frequency: "one_time"
form_url: "https://example.org/donate"
purpose: null
note: null
donor_contact:
name: "Warren Buffet"
email: "warrenBuffet@example.com"
phone: "+12125550100"
address:
line1: "3555 Farnam Street"
line2: null
city: "Omaha"
state: "NE"
zip: "68131"
rejection_reason: null
created_at: "2026-03-28T10:05:00Z"
updated_at: "2026-03-29T08:00:00Z"
- id: "grant_req_01jpjenf5q6cawy43yxfcrxhcv"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
giving_pool_id: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
status: "rejected"
ein: "13-1788491"
nonprofit_name: "Doctors Without Borders"
amount_cents: 500000
frequency: "one_time"
form_url: "https://example.org/donate"
purpose: null
note: null
donor_contact:
name: "Warren Buffet"
email: "warrenBuffet@example.com"
phone: "+12125550100"
address:
line1: "3555 Farnam Street"
line2: null
city: "Omaha"
state: "NE"
zip: "68131"
rejection_reason: "Grant amount exceeds donor's available balance."
created_at: "2026-03-20T16:11:00Z"
updated_at: "2026-03-21T09:30:00Z"
next_page_token: "c3f685f2-2dda-4956-815b-39867a5e5638"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/grant_requests/{id}:
get:
summary: Get Grant Request
description: |-
Retrieve a Grant Request with the given ID.
operationId: get-grant-request
tags:
- Grant Requests
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique ID of the Grant Request.
required: true
schema:
type: string
responses:
"200":
description: OK
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/GrantRequest"
examples:
Pending:
$ref: "#/components/examples/GrantRequestPendingOutput"
AwaitingAccountDecision:
$ref: "#/components/examples/GrantRequestAwaitingAccountDecisionOutput"
Submitted:
$ref: "#/components/examples/GrantRequestSubmittedOutput"
Rejected:
$ref: "#/components/examples/GrantRequestRejectedOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/grant_requests/{id}/submit:
post:
summary: Submit Grant Request
description: |-
Confirm that you have submitted the grant in your system.
Calling this endpoint moves the Grant Request's status to `submitted` and emits a `grant_request.updated` webhook event.
- The Grant Request must be in `pending` status. If the linked [Donor Account](/api/donor-accounts) is not yet `approved`, the Grant Request will be in `awaiting_account_decision` and this request returns status `412 Precondition Failed`.
- A Grant Request that is already `submitted` or `rejected` cannot be updated. Subsequent calls return status `409 Conflict`.
operationId: submit-grant-request
tags:
- Grant Requests
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique ID of the Grant Request.
required: true
schema:
type: string
requestBody:
$ref: "#/components/requestBodies/SubmitGrantRequest"
responses:
"200":
description: The Grant Request was submitted.
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/GrantRequest"
examples:
Submitted:
$ref: "#/components/examples/GrantRequestSubmittedOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"409":
$ref: "#/components/responses/ConflictError"
"412":
$ref: "#/components/responses/PreconditionFailedError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/grant_requests/{id}/reject:
post:
summary: Reject Grant Request
description: |-
Indicate that you will not process this grant.
Calling this endpoint moves the Grant Request's status to `rejected` and emits a `grant_request.updated` webhook event.
The Donor Account itself is unaffected; future Grant Requests from the same donor can still be processed.
A Grant Request that is already `submitted` or `rejected` cannot be updated. Subsequent calls return status `409 Conflict`.
operationId: reject-grant-request
tags:
- Grant Requests
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique ID of the Grant Request.
required: true
schema:
type: string
requestBody:
$ref: "#/components/requestBodies/RejectGrantRequest"
responses:
"200":
description: The Grant Request was rejected.
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/GrantRequest"
examples:
Rejected:
$ref: "#/components/examples/GrantRequestRejectedOutput"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"409":
$ref: "#/components/responses/ConflictError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/events:
get:
summary: List Events
description: |-
List all events corresponding to your Chariot account.
operationId: listEvents
tags:
- Events
security:
- bearerAuth: []
parameters:
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: cursor
in: query
description: The cursor to use for pagination. If not set, the first page of results will be returned.
required: false
schema:
type: string
- name: category
in: query
description: |
Filter Events for those with the specified category.
required: false
schema:
$ref: "#/components/schemas/EventCategory"
responses:
"200":
$ref: "#/components/responses/ListEventsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/events/{id}:
get:
summary: Get Event
description: |-
Retrieve an event with the given ID.
operationId: getEvent
tags:
- Events
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique id for the event
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/Event"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/event_subscriptions:
post:
summary: Create an Event Subscription
description: |-
Create an event subscription corresponding to your Chariot account.
operationId: createEventSubscription
tags:
- Event Subscriptions
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/CreateEventSubscriptionRequest"
responses:
"201":
description: Created
headers:
Location:
$ref: "#/components/headers/Location"
content:
application/json:
schema:
$ref: "#/components/schemas/EventSubscription"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
get:
summary: List Event Subscriptions
description: |-
List all event subscriptions corresponding to your Chariot account.
operationId: listEventSubscriptions
tags:
- Event Subscriptions
security:
- bearerAuth: []
parameters:
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: cursor
in: query
description: The cursor to use for pagination. If not set, the first page of results will be returned.
required: false
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListEventSubscriptionsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/event_subscriptions/{id}:
get:
summary: Get an Event Subscription
description: |-
Retrieve an event subscription with the given ID.
operationId: getEventSubscription
tags:
- Event Subscriptions
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the event subscription
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/EventSubscription"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
patch:
summary: Update an Event Subscription
description: |-
Update an event subscription with the given ID.
operationId: updateEventSubscription
tags:
- Event Subscriptions
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the event subscription
required: true
schema:
type: string
requestBody:
$ref: "#/components/requestBodies/UpdateEventSubscriptionRequest"
responses:
"200":
description: Updated
content:
application/json:
schema:
$ref: "#/components/schemas/EventSubscription"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/financial_accounts:
get:
summary: List financial accounts
description: |
Returns a list of financial accounts.
operationId: listFinancialAccounts
tags:
- financial_accounts
security:
- bearerAuth: []
responses:
"200":
$ref: "#/components/responses/ListFinancialAccountsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/financial_accounts/{id}:
get:
summary: Get a financial account
description: |
Get a financial account by its unique identifier.
operationId: getFinancialAccount
tags:
- financial_accounts
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the financial account
required: true
schema:
type: string
example: "account_01jpjenf5q6cawy43yxfcrxhct"
responses:
"200":
description: The financial account was retrieved
content:
application/json:
schema:
$ref: "#/components/schemas/FinancialAccount"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/financial_accounts/{id}/balance:
get:
summary: Get a financial account balance
description: |
Get a financial account balance by its unique identifier.
operationId: getFinancialAccountBalance
tags:
- financial_accounts
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the financial account
required: true
schema:
type: string
example: "account_01jpjenf5q6cawy43yxfcrxhct"
responses:
"200":
description: The financial account was retrieved
content:
application/json:
schema:
$ref: "#/components/schemas/FinancialAccountBalance"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/verification_requests:
post:
summary: Create a verification request
description: |
Request verification of an unlisted organization. If the organization cannot be found through Chariot's search,
you can submit a verification request so that Chariot's compliance team can review and verify the organization.
operationId: createVerificationRequest
tags:
- verificationRequests
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/CreateVerificationRequestRequest"
responses:
"201":
description: The verification request was created
headers:
Location:
$ref: "#/components/headers/Location"
content:
application/json:
schema:
$ref: "#/components/schemas/VerificationRequest"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"409":
$ref: "#/components/responses/ConflictError"
"412":
$ref: "#/components/responses/PreconditionFailedError"
get:
summary: List verification requests
description: |
Returns a paginated list of all verification requests for the authenticated grantmaker.
operationId: listVerificationRequests
tags:
- verificationRequests
security:
- bearerAuth: []
parameters:
- name: ein
in: query
description: Filter by EIN. If provided, only returns verification requests matching this EIN.
required: false
schema:
type: string
- name: page_limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: page_token
in: query
description: |-
A token to use to retrieve the next page of results.
required: false
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListVerificationRequestsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/verification_requests/{id}:
get:
summary: Get a verification request
description: |
Get a specific verification request by its unique identifier.
operationId: getVerificationRequest
tags:
- verificationRequests
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier of the verification request
required: true
schema:
type: string
responses:
"200":
description: The verification request
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/VerificationRequest"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/disbursements:
post:
summary: Create a disbursement
description: |
Create a disbursement to send money to an organization.
operationId: createDisbursement
tags:
- disbursements
security:
- bearerAuth: []
parameters:
- name: Idempotency-Key
in: header
description: |-
A client-generated identifier for the request. Replays with the same key return `409 Conflict`. The successfully created disbursement can later be located via `GET /v1/disbursements?idempotency_key=...`.
We recommend supplying your own unique identifier for the disbursement in your system, so you can later look it up by an ID you already track.
required: false
schema:
type: string
requestBody:
$ref: "#/components/requestBodies/CreateDisbursementRequest"
responses:
"201":
description: The disbursement was created
headers:
Location:
$ref: "#/components/headers/Location"
content:
application/json:
schema:
$ref: "#/components/schemas/Disbursement"
examples:
DafGrantDisbursement:
$ref: "#/components/examples/DafGrantDisbursement"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"409":
$ref: "#/components/responses/ConflictError"
"500":
$ref: "#/components/responses/InternalServerError"
get:
summary: List disbursements
description: |
Returns a list of disbursements.
operationId: listDisbursements
tags:
- disbursements
security:
- bearerAuth: []
parameters:
- name: organization_id
in: query
description: The unique identifier for the organization
required: false
schema:
type: string
example: "org_01jpjenf5q6cawy43yxfcrxhct"
- name: page_limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: next_page_token
in: query
description: |-
A token to use to retrieve the next page of results. This is useful for paginating over many pages of results. If set, all other arguments are expected to be kept the same as previous calls and the value of this field should be from the nextPageToken in the previous response.
required: false
schema:
type: string
- name: includes
in: query
description: |-
A comma separated list of fields to include in the response.
Possible values include:
- `organization`: Include the organization object in the response.
required: false
schema:
type: string
example: "organization"
- name: idempotency_key
in: query
description: |-
Filter to the disbursement created with this exact `Idempotency-Key` header on `POST /v1/disbursements`. Useful for recovering the result of a create request when the response was lost (e.g. network timeout). Returns at most one disbursement. Disbursements created via `POST /v1/disbursements/bulk` cannot be looked up this way.
required: false
schema:
type: string
example: "8e91b2f3-d7c4-4a59-9a91-72a40b1f2c3d"
responses:
"200":
$ref: "#/components/responses/ListDisbursementsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/disbursements/bulk:
post:
summary: Create multiple disbursements
description: |
Create multiple disbursements in a single request.
This is useful for batch operations where you need to create many disbursements at once.
All disbursements in the request will be created together. If any disbursement fails validation,
the entire request will fail and no disbursements will be created.
**Note:** Disbursements created through this endpoint cannot be looked up via `GET /v1/disbursements?idempotency_key=...`. The `idempotency_key` field on the returned disbursements will be `null`.
operationId: bulkCreateDisbursements
tags:
- disbursements
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/BulkCreateDisbursementsRequest"
responses:
"201":
description: The disbursements were created
content:
application/json:
schema:
type: object
required:
- disbursements
- count
properties:
disbursements:
type: array
items:
$ref: "#/components/schemas/Disbursement"
count:
type: integer
description: The number of disbursements created
example: 2
examples:
BulkCreateDisbursements:
$ref: "#/components/examples/BulkCreateDisbursements"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"409":
$ref: "#/components/responses/ConflictError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/disbursements/{id}:
get:
summary: Get a disbursement
description: |
Get a disbursement by its unique identifier.
operationId: getDisbursement
tags:
- disbursements
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the disbursement
required: true
schema:
type: string
example: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
responses:
"200":
description: The disbursement was retrieved
content:
application/json:
schema:
$ref: "#/components/schemas/Disbursement"
examples:
DafGrantDisbursement:
$ref: "#/components/examples/DafGrantDisbursement"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/disbursements/{id}/approve:
post:
summary: Approve a disbursement
description: |
Approve a disbursement in a pending_approval state.
If the disbursement is in a different state, this will return a 400 error.
operationId: approveDisbursement
tags:
- disbursements
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the disbursement
required: true
schema:
type: string
example: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
responses:
"200":
description: The disbursement was approved
content:
application/json:
schema:
$ref: "#/components/schemas/Disbursement"
examples:
ApprovedDafGrantDisbursement:
$ref: "#/components/examples/ApprovedDafGrantDisbursement"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/disbursements/approve:
post:
summary: Approve multiple disbursements
description: |
Approve multiple disbursements in a single request.
This is useful for batch approval operations.
All disbursements must be in the `pending_approval` state. If any disbursement
cannot be approved, the entire request will fail and no disbursements will be approved.
operationId: bulkApproveDisbursements
tags:
- disbursements
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- disbursement_ids
properties:
disbursement_ids:
type: array
description: Array of disbursement IDs to approve
minItems: 1
items:
type: string
example: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
responses:
"200":
description: The disbursements were approved
content:
application/json:
schema:
type: object
required:
- disbursements
- count
properties:
disbursements:
type: array
items:
$ref: "#/components/schemas/Disbursement"
count:
type: integer
description: The number of disbursements approved
example: 5
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/disbursements/{id}/cancel:
post:
summary: Cancel a pending disbursement
description: |
Cancel a pending disbursement in a pending_approval state.
If the disbursement is in a different state, this will return a 400 error.
operationId: cancelDisbursement
tags:
- disbursements
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the disbursement
required: true
schema:
type: string
example: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
responses:
"200":
description: The disbursement was canceled
content:
application/json:
schema:
$ref: "#/components/schemas/Disbursement"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/disbursements/{id}/stop:
post:
summary: Stop payment for a disbursement
description: |
Stop payment for a disbursement sent via check.
This prevents the recipient from depositing the check. If the check has already been deposited, the stop payment request will fail.
**Requirements:**
- Disbursement must be in `submitted` status
- Disbursement must be sent via check
- Check must not have already been deposited
After successfully stopping payment, the disbursement status will be updated to `stopped`.
operationId: stopDisbursement
tags:
- disbursements
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the disbursement
required: true
schema:
type: string
example: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
requestBody:
$ref: "#/components/requestBodies/StopDisbursementRequest"
responses:
"202":
description: The stop payment request was accepted
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"412":
$ref: "#/components/responses/PreconditionFailedError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/simulations/disbursements/{id}/complete:
post:
summary: "Sandbox: Complete a disbursement"
description: |
Simulates successful disbursement completion for testing purposes.
The disbursement must have a status of `submitted`.
After calling this endpoint, the disbursement status will be updated to `completed`.
This API is only available in the sandbox environment.
operationId: simulateDisbursementCompletion
tags:
- disbursements
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the disbursement
required: true
schema:
type: string
example: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
responses:
"202":
description: The disbursement completion request was accepted
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/simulations/disbursements/{id}/fail:
post:
summary: "Sandbox: Fail a disbursement"
description: |
Simulates a payment failure or return for testing purposes.
The disbursement must have a status of `submitted`.
This only applies for disbursements sent via ACH or check.
- **ACH disbursements**: Status becomes `failed` (payment was returned and cannot be retried)
- **Check disbursements**: Status becomes `validating_organization` (check was returned). When this happens, Chariot will investigate why the check failed to reach the organization, update any required recipient information (such as mailing address or organization contact details), and automatically reattempt payout once the issue is resolved.
This API is only available in the sandbox environment.
operationId: simulateDisbursementFailure
tags:
- disbursements
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the disbursement
required: true
schema:
type: string
example: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
responses:
"202":
description: The disbursement failure simulation was accepted
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/simulations/grants/{id}/complete:
post:
summary: "Sandbox: Complete a grant"
description: |
Simulates the DAF sponsor completing a grant. Transitions the grant status to `completed`.
This API is only available in the sandbox environment.
operationId: simulateGrantCompletion
tags:
- Grants
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the grant.
required: true
schema:
type: string
format: uuid
example: "10229488-08d2-4629-b70c-a2f4f4d25344"
responses:
"200":
description: The updated grant
content:
application/json:
schema:
$ref: "#/components/schemas/Grant"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/simulations/grants/{id}/cancel:
post:
summary: "Sandbox: Cancel a grant"
description: |
Simulates the DAF sponsor canceling the grant. Transitions the grant status to `canceled`.
This API is only available in the sandbox environment.
operationId: simulateGrantCancellation
tags:
- Grants
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the grant.
required: true
schema:
type: string
format: uuid
example: "10229488-08d2-4629-b70c-a2f4f4d25344"
responses:
"200":
description: The updated grant
content:
application/json:
schema:
$ref: "#/components/schemas/Grant"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/inbound_transfers:
post:
summary: Create an Inbound transfer
description: |-
Create an inbound transfer to fund your financial account
from an externally linked bank account.
In Production, this requires that an external bank account has been setup
and verified for your account through the Chariot Dashboard.
operationId: createInboundTransfer
tags:
- inboundTransfers
security:
- bearerAuth: []
parameters:
- name: Idempotency-Key
in: header
description: The idempotency key for the request
required: false
schema:
type: string
requestBody:
$ref: "#/components/requestBodies/CreateInboundTransferRequest"
responses:
"201":
description: The inbound transfer was created
headers:
Location:
$ref: "#/components/headers/Location"
Idempotency-Key:
$ref: "#/components/headers/Idempotency-Key"
content:
application/json:
schema:
$ref: "#/components/schemas/InboundTransfer"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"409":
$ref: "#/components/responses/ConflictError"
"500":
$ref: "#/components/responses/InternalServerError"
get:
summary: List Inbound Transfers
description: |-
List inbound transfers for your account.
operationId: listInboundTransfers
tags:
- inboundTransfers
security:
- bearerAuth: []
parameters:
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: pageToken
in: query
description: The cursor to use for pagination. If not set, the first page of results will be returned.
required: false
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListInboundTransfersResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/inbound_transfers/{id}:
get:
summary: Get an Inbound Transfer
description: |-
Get an inbound transfer by its unique identifier.
operationId: getInboundTransfer
tags:
- inboundTransfers
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the inbound transfer
required: true
schema:
type: string
example: "inbound_transfer_01j8rs605a4gctmbm58d87mvsj"
responses:
"200":
description: The inbound transfer was retrieved
content:
application/json:
schema:
$ref: "#/components/schemas/InboundTransfer"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/inbound_transfers/{id}/cancel:
post:
summary: Cancel an Inbound Transfer
description: |-
Cancel an inbound transfer.
Returns the Inbound Transfer object if the cancelation succeeded.
Returns a 412 Precondition Failed if the Inbound Transfer has already been canceled or cannot be canceled.
operationId: cancelInboundTransfer
tags:
- inboundTransfers
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the inbound transfer
required: true
schema:
type: string
example: "inbound_transfer_01j8rs605a4gctmbm58d87mvsj"
responses:
"200":
description: The inbound transfer was canceled
content:
application/json:
schema:
$ref: "#/components/schemas/InboundTransfer"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"409":
$ref: "#/components/responses/ConflictError"
"412":
$ref: "#/components/responses/PreconditionFailedError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/simulations/inbound_transfers/{id}/fail:
post:
summary: "Sandbox: Fail an Inbound Transfer"
description: |-
Simulate an inbound transfer failure.
This API is only available in the sandbox environment.
operationId: simulateInboundTransferFailure
tags:
- inboundTransfers
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the inbound transfer
required: true
schema:
type: string
example: "inbound_transfer_01j8rs605a4gctmbm58d87mvsj"
responses:
"202":
description: The inbound transfer failure request was accepted
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/simulations/inbound_transfers/{id}/complete:
post:
summary: "Sandbox: Complete an Inbound Transfer"
description: |-
Simulate an inbound transfer completion.
This API is only available in the sandbox environment.
operationId: simulateInboundTransferCompletion
tags:
- inboundTransfers
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the inbound transfer
required: true
schema:
type: string
example: "inbound_transfer_01j8rs605a4gctmbm58d87mvsj"
responses:
"202":
description: The inbound transfer completion request was accepted
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/payment_sources:
get:
summary: List Payment Sources
description: |-
List payment sources for your Chariot account.
Payment Sources represent segregated addresses for incoming deposits.
In practice, this can be separate electronic bank addresses (account + routing numbers) or physical mailing addresses (lockboxes).
Payment Sources make it easy to independently manage and consolidate incoming payments and donations from different sources
which in turn makes reconciliation of money and data seamless.
Every Payment Source belongs to a specific Financial Account and can be thought of as a gateway/door for money to flow into the Financial Account.
Payment Sources are not separately ledgered which means you can't get the balance of a Payment Source separately from the Financial Account.
Payment Sources should be setup and managed through the Chariot Dashboard.
operationId: listPaymentSources
tags:
- paymentSources
security:
- bearerAuth: []
parameters:
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: page_token
in: query
description: The cursor to use for pagination. If not set, the first page of results will be returned.
required: false
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListPaymentSourcesResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/payment_sources/{id}:
get:
summary: Get a Payment Source
description: |-
Get a payment source by its unique identifier.
A Payment Source represents a segregated address for incoming deposits.
In practice, this can be separate electronic bank addresses (account + routing numbers) or physical mailing addresses (lockboxes).
Payment Sources make it easy to independently manage and consolidate incoming payments and donations from different sources
which in turn makes reconciliation of money and data seamless.
Every Payment Source belongs to a specific Financial Account and can be thought of as a gateway/door for money to flow into the Financial Account.
Payment Sources are not separately ledgered which means you can't get the balance of a Payment Source separately from the Financial Account.
Payment Sources should be setup and managed through the Chariot Dashboard.
operationId: getPaymentSource
tags:
- paymentSources
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the payment source
required: true
schema:
type: string
example: "payment_source_01j8rs605a4gctmbm58d87mvsj"
responses:
"200":
description: Successfully retrieved the payment source.
content:
application/json:
schema:
$ref: "#/components/schemas/PaymentSource"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/donations:
get:
summary: List Donations
description: |-
List donations for your account.
operationId: listDonations
tags:
- donations
security:
- bearerAuth: []
parameters:
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: page_token
in: query
description: The cursor to use for pagination. If not set, the first page of results will be returned.
required: false
schema:
type: string
- name: payment_source_id
in: query
description: The unique identifier for the payment sources to filter donations by. Comma separated list of payment source IDs.
required: false
schema:
type: string
example: "payment_source_01j8rs605a4gctmbm58d87mvsj"
- name: deposit_id
in: query
description: The unique identifier for the deposit to filter donations by.
required: false
schema:
type: string
example: "deposit_01j8rs605a4gctmbm58d87mvsj"
- name: created_at.after
in: query
description: Return donations created after the given date and time.
required: false
schema:
type: string
format: date-time
- name: created_at.before
in: query
description: Return donations created before the given date and time.
required: false
schema:
type: string
format: date-time
- name: dafpay_tracking_id
in: query
description: The DAFpay tracking identifier to filter donations by. Use this to reconcile a donation against the DAFpay grant that started it.
required: false
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListDonationsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/donations/{id}:
get:
summary: Get a Donation
description: |-
Get a donation by its unique identifier.
operationId: getDonation
tags:
- donations
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the donation
required: true
schema:
type: string
example: "donation_01j8rs605a4gctmbm58d87mvsj"
responses:
"200":
description: The donation was retrieved
content:
application/json:
schema:
$ref: "#/components/schemas/Donation"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/deposits:
get:
summary: List Deposits
description: |-
List deposits for your account.
operationId: listDeposits
tags:
- deposits
security:
- bearerAuth: []
parameters:
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: page_token
in: query
description: The cursor to use for pagination. If not set, the first page of results will be returned.
required: false
schema:
type: string
- name: payment_source_id
in: query
description: The unique identifier for the payment sources to filter deposits by. Comma separated list of payment source IDs.
required: false
schema:
type: string
example: "payment_source_01j8rs605a4gctmbm58d87mvsj"
- name: settled_at.after
in: query
description: Return deposits with a settled date and time after the given date and time.
required: false
schema:
type: string
format: date-time
- name: settled_at.before
in: query
description: Return deposits with a settled date and time before the given date and time.
required: false
schema:
type: string
format: date-time
responses:
"200":
$ref: "#/components/responses/ListDepositsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/deposits/{id}:
get:
summary: Get a Deposit
description: |-
Get a deposit by its unique identifier.
operationId: getDeposit
tags:
- deposits
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the deposit
required: true
schema:
type: string
example: "deposit_01j8rs605a4gctmbm58d87mvsj"
responses:
"200":
description: The deposit was retrieved
content:
application/json:
schema:
$ref: "#/components/schemas/Deposit"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/properties:
get:
summary: List Properties
description: |-
List properties for your account.
operationId: listProperties
tags:
- properties
security:
- bearerAuth: []
parameters:
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: page_token
in: query
description: The cursor to use for pagination. If not set, the first page of results will be returned.
required: false
schema:
type: string
- name: resource_type
in: query
description: The type of the resource that the properties are associated with.
required: false
schema:
$ref: "#/components/schemas/ResourceType"
responses:
"200":
$ref: "#/components/responses/ListPropertiesResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/properties/{id}:
get:
summary: Get a Property
description: |-
Get a property by its unique identifier.
operationId: getProperty
tags:
- properties
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the property
required: true
schema:
type: string
example: "prop_01j8rs605a4gctmbm58d87mvsj"
responses:
"200":
description: The property was retrieved
content:
application/json:
schema:
$ref: "#/components/schemas/Property"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/properties/{id}/options:
get:
summary: List Property Options
description: |-
List all options for an enum or user property.
operationId: listPropertyOptions
tags:
- properties
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the property
required: true
schema:
type: string
example: "prop_01j8rs605a4gctmbm58d87mvsj"
- name: limit
in: query
description: Limit the size of the list that is returned. The default (and maximum) is 100 objects.
required: false
schema:
type: integer
format: int32
- name: page_token
in: query
description: The cursor to use for pagination. If not set, the first page of results will be returned.
required: false
schema:
type: string
responses:
"200":
$ref: "#/components/responses/ListPropertyOptionsResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/properties/{id}/assign:
post:
summary: Assign a Property
description: |-
Appends a Property to one or more Donations or Deposits.
A maximum of 100 resources can be assigned to a property at a time.
The resource identifiers must be of the same resource_type as the Property, otherwise a 400 Bad Request error will be returned.
operationId: assignProperty
tags:
- properties
security:
- bearerAuth: []
parameters:
- name: id
in: path
description: The unique identifier for the property
required: true
schema:
type: string
example: "prop_01j8rs605a4gctmbm58d87mvsj"
requestBody:
$ref: "#/components/requestBodies/AssignPropertyRequest"
responses:
"200":
$ref: "#/components/responses/AssignPropertyResponse"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/mailbox/upload_url:
post:
summary: Get a Batch Upload URL
description: |-
Returns a presigned URL for uploading a mailbox batch.
A batch is a ZIP file containing TIFF images and a CSV index file.
The CSV must conform to the [Batch Format](/v2026-01-15/guides/lockbox-providers/batch-format) specification.
The `location_id` must match the format `po_` (e.g., `po_543`).
The returned URL is a presigned S3 URL valid for 15 minutes. Upload the batch ZIP file using an HTTP PUT request to this URL.
See the [Mail Uploads guide](/v2026-01-15/guides/lockbox-providers/mail-uploads) for details on the upload and rescan process.
operationId: getMailboxUploadUrl
tags:
- mailbox
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- location_id
properties:
location_id:
type: string
description: The identifier of the PO box or lockbox location. Must match the format `po_`.
example: "po_543"
responses:
"200":
description: Successfully generated a presigned upload URL.
content:
application/json:
schema:
type: object
properties:
url:
type: string
description: The presigned URL to upload the batch ZIP file to via HTTP PUT. Expires after 15 minutes.
example: "https://storage.example.com/upload?token=abc123"
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/lockboxes/fulfill_request:
post:
summary: Fulfill a Lockbox Request
description: |-
Notifies Chariot that a new PO box has been provisioned by the lockbox provider.
The `request_id` is a one-time unique value generated by Chariot for each PO box request.
See the [Provisioning guide](/v2026-01-15/guides/lockbox-providers/provisioning) for the full provisioning flow.
operationId: provisionMailbox
tags:
- mailbox
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- request_id
- location_id
- address
properties:
request_id:
type: string
description: The unique request identifier originally provided by Chariot when the PO box was requested.
example: "123456789"
location_id:
type: string
description: The identifier of the newly provisioned PO box.
example: "po_9876"
address:
$ref: "#/components/schemas/Address"
responses:
"200":
description: Indicates the PO box has been successfully provisioned.
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/nonprofit_addresses:
post:
summary: Create Nonprofit Addresses
description: |-
Submit mailing addresses for one or more nonprofits. Uploaded
addresses are used as suggestions for where to send disbursements.
operationId: createNonprofitAddressSuggestion
tags:
- nonprofitAddresses
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/CreateNonprofitAddressSuggestionRequest"
responses:
"200":
description: All addresses were accepted.
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
/v1/nonprofit_contacts:
post:
summary: Create Nonprofit Contacts
description: |-
Submit contact information for one or more nonprofits. Uploaded
contacts are used as suggestions for who to notify about disbursements.
operationId: createNonprofitContactSuggestion
tags:
- nonprofitContacts
security:
- bearerAuth: []
requestBody:
$ref: "#/components/requestBodies/CreateNonprofitContactSuggestionRequest"
responses:
"200":
description: All suggestions were accepted.
"400":
$ref: "#/components/responses/BadRequestError"
"401":
$ref: "#/components/responses/AuthenticationError"
"403":
$ref: "#/components/responses/ForbiddenError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalServerError"
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
schemas:
OrganizationSummary:
type: object
description: |-
A summary of an organization.
required:
- id
- ein
- name
properties:
id:
type: string
description: The unique identifier for the organization.
example: org_01jpjenf5q6cawy43yxfcrxhct
ein:
type: string
description: The Employer Identification Number (EIN) or TaxID for the nonprofit entity.
example: "123456789"
name:
type: string
description: The name of the organization.
example: American Red Cross
daf_eligible:
type: boolean
description: Whether the organization is eligible to receive donations from a Donor Advised Fund.
example: true
city:
type: string
description: The city of the organization.
example: New York
state:
type: string
description: The state of the organization.
example: NY
SandboxSettlement:
type: string
description: |-
The electronic rail on which disbursements to an onboarded sandbox
organization settle. `SANDBOX_SETTLEMENT_ACCOUNT_TRANSFER` settles as an
in-network transfer between accounts on the same bank. `SANDBOX_SETTLEMENT_ACH`
settles via ACH across banks.
enum:
- SANDBOX_SETTLEMENT_ACCOUNT_TRANSFER
- SANDBOX_SETTLEMENT_ACH
Organization:
type: object
description: |-
An `Organization` represents an operating nonprofit or an operating sub-organization of a parent or sponsoring nonprofit.
The generally accepted identifier for an organization is its domain. This domain provides proof of identity, ownership and relationship to an entity.
Organizations can receive payments from payers on the network.
required:
- id
- ein
- name
properties:
id:
type: string
readOnly: true
description: The unique identifier for the object.
example: org_01jpjenf5q6cawy43yxfcrxhct
ein:
type: string
description: The EIN of the organization.
example: "123456789"
name:
type: string
description: |-
The name of the organization.
For organizations that operate under a different name than the one tied to the legal entity,
this name will differ from the name of the linked entity.
This is also known as the "DBA" or "Doing Business As" name of the organization.
example: American Red Cross
parent_organization_id:
type: string
description: |-
The unique identifier of the parent organization, if this is a sponsored organization.
This value is `null` or empty if the organization is not sponsored or not a child of a parent organization.
example: org_01j8rs605a4gctmbm58d87mvsk
physical_address:
$ref: "#/components/schemas/Address"
classification:
$ref: "#/components/schemas/NonprofitClassification"
compliance:
$ref: "#/components/schemas/NonprofitCompliance"
mission_statement:
type: string
description: The mission statement of the organization
example: To provide relief to those in need
web:
$ref: "#/components/schemas/WebDomain"
brand:
$ref: "#/components/schemas/Brand"
officers:
type: array
description: The list of officers of the organization
items:
$ref: "#/components/schemas/Person"
claimed:
type: boolean
readOnly: true
description: |-
A flag to indicate if the nonprofit has been claimed by a user.
A nonprofit is claimed if a user signs up for a Chariot account with
this nonprofit and is verified by the Chariot team.
incorporation:
$ref: "#/components/schemas/Incorporation"
Incorporation:
type: object
description: |-
Incorporation and IRS determination information for the nonprofit entity.
properties:
formation_year:
type: string
format: integer
description: The year the organization was incorporated or formed.
example: "2005"
state:
type: string
description: The U.S. state where the organization is legally domiciled.
example: AZ
ruling_date:
type: string
description: |-
The month and year on the IRS ruling or determination letter recognizing the organization's exempt status.
Formatted as an ISO 8601 year-month string.
example: "2020-07"
NonprofitClassification:
type: object
description: |-
A classification of the nonprofit entity as defined by the IRS.
properties:
group_exemption_number:
type: string
description: This is a four-digit internal IRS number assigned to central/parent entity holding group exemption letters.
subsection_code:
$ref: "#/components/schemas/TaxExemptCode"
filing_requirement_code:
$ref: "#/components/schemas/TaxExemptCode"
foundation_code:
$ref: "#/components/schemas/TaxExemptCode"
affiliation_code:
$ref: "#/components/schemas/TaxExemptCode"
organization_code:
$ref: "#/components/schemas/TaxExemptCode"
exempt_status_code:
$ref: "#/components/schemas/TaxExemptCode"
deductibility_code:
$ref: "#/components/schemas/TaxExemptCode"
ntee_code:
$ref: "#/components/schemas/NteeCode"
naics_code:
$ref: "#/components/schemas/NaicsCode"
NonprofitCompliance:
type: object
description: |-
An object that contains legal information about the nonprofit entity and its tax-exemption status.
This information is used to comply with regulations and ensure the legitimacy of the nonprofit for purposes of donations and disbursements.
properties:
daf_eligible:
type: boolean
description: Whether the entity is eligible to receive donations from a Donor Advised Fund
example: true
irs_pub_78:
$ref: "#/components/schemas/ComplianceRequirement"
ofac:
$ref: "#/components/schemas/ComplianceRequirement"
foundation_code:
$ref: "#/components/schemas/ComplianceRequirement"
california_attorney_general_registry:
$ref: "#/components/schemas/ComplianceRequirement"
california_franchise_tax_board:
$ref: "#/components/schemas/ComplianceRequirement"
NonprofitAddressSuggestionEntry:
type: object
description: A mailing address uploaded for a nonprofit, identified by its EIN.
required:
- ein
- line1
- city
- state
- zip
properties:
ein:
type: string
description: |-
The EIN of the nonprofit this address belongs to. Accepted as
either nine digits (`123456789`) or `XX-XXXXXXX`.
example: "13-1635294"
line1:
type: string
maxLength: 255
description: Street address.
example: "431 18th Street NW"
line2:
type: string
maxLength: 255
description: Optional suite, apartment, or unit.
example: "Suite 200"
city:
type: string
maxLength: 255
description: City.
example: "Washington"
state:
type: string
description: Two-letter US state code (uppercase).
example: "DC"
zip:
type: string
description: US ZIP code. Five digits, optionally followed by a four-digit extension.
example: "20006"
NonprofitContactSuggestionEntry:
type: object
description: A contact uploaded for a nonprofit, identified by its EIN.
required:
- ein
- email
properties:
ein:
type: string
description: |-
The EIN of the nonprofit this contact belongs to. Accepted as
either nine digits (`123456789`) or `XX-XXXXXXX`.
example: "13-1635294"
email:
type: string
maxLength: 255
description: Email of the contact person at the nonprofit.
example: "claims@redcross.org"
phone:
type: string
maxLength: 255
description: Optional phone number for the contact.
example: "2025551212"
first_name:
type: string
maxLength: 255
description: Optional first name of the contact.
example: "Sarah"
last_name:
type: string
maxLength: 255
description: Optional last name of the contact.
example: "Johnson"
Person:
type: object
description: |-
A person is an individual who is an officer of a nonprofit.
required:
- name
properties:
name:
type: string
description: The full name of the person
title:
type: string
description: The title or role of the person with respect to the nonprofit entity
example: Executive Director
TaxExemptCode:
type: object
description: |-
A tax exempt code is a code that is used to classify the tax-exempt status of a nonprofit entity.
required:
- name
- code
properties:
code:
type: integer
description: The code of the tax exempt code
example: 1
name:
type: string
description: The name of the tax exempt code
example: "UNCONDITIONAL"
description:
type: string
description: The description of the tax exempt code
example: "Unconditional Exemption"
NteeCode:
type: object
description: |-
A code that is used to classify the nonprofit entity as defined by the IRS.
required:
- code
- description
properties:
code:
type: string
description: The code of the NTEE code
example: "A"
description:
type: string
description: The description of the NTEE code
example: "Animal Welfare"
parent_code:
type: string
description: The parent code of the NTEE code
example: "A"
parent_description:
type: string
description: The description of the parent NTEE code
example: "Animal Welfare"
NaicsCode:
type: object
description: |-
A code that is used to classify the nonprofit entity as defined by the NAICS.
properties:
naics2:
type: string
description: The code of the NAICS code
example: "31"
naics2_description:
type: string
description: The description of the NAICS code
example: "Manufacturing"
naics4:
type: string
description: The code of the NAICS code
example: "3112"
naics4_description:
type: string
description: The description of the NAICS code
example: "Grain and Oilseed Milling"
naics6:
type: string
description: The code of the NAICS code
example: "311221"
naics6_description:
type: string
description: The description of the NAICS code
example: "Wet Corn Milling and Starch Manufacturing"
ComplianceRequirement:
type: object
description: |-
A compliance requirement is a requirement that a nonprofit entity must meet in order to be eligible for Chariot services.
properties:
compliant:
type: boolean
description: Whether the entity is compliant with the requirement
example: true
reason:
type: string
description: The reason for the compliance requirement
last_found_at:
type: string
format: date-time
description: The date and time when the compliance requirement was last found
example: "2020-01-31T23:00:00Z"
WebDomain:
type: object
description: |-
A web domain is a unique identifier for a website or web application that is associated with an organization.
Domains are important identity constructs that underpin the web and online interactions.
The domain can be used as an identifier and its validity can be asserted via DNS.
required:
- domain
properties:
domain:
type: string
description: The DNS domain name
example: "redcross.org"
Brand:
type: object
description: |-
Fair use brand assets that are associated with an organization and can be used for identification and informational purposes.
properties:
icon_url:
type: string
description: The URL of the organization's icon
logo_url:
type: string
description: The URL of the organization's logo
PaymentSource:
type: object
description: |-
A Payment Source represents a segregated address for incoming deposits.
In practice, this can be separate electronic bank addresses (account + routing numbers) or physical mailing addresses (lockboxes).
Payment Sources make it easy to independently manage and consolidate incoming payments and donations from different sources
which in turn makes reconciliation of money and data seamless.
Every Payment Source belongs to a specific Financial Account and can be thought of as a gateway/door for money to flow into the Financial Account.
Payment Sources are not separately ledgered which means you can't get the balance of a Payment Source separately from the Financial Account.
properties:
id:
type: string
readOnly: true
description: The unique identifier for the payment source
example: "payment_source_01j8rs605a4gctmbm58d87mvsj"
financial_account_id:
type: string
description: The unique identifier for the financial account that the payment source belongs to
example: "fa_01j8rs605a4gctmbm58d87mvsj"
name:
type: string
description: The name of the payment source
example: "Main Payment Source"
source_type:
type: string
description: The type of the payment source
example: "portal"
enum:
- manual
- portal
- lockbox
- grantmaker
financial_address:
$ref: "#/components/schemas/FinancialAddress"
lockbox:
$ref: "#/components/schemas/Lockbox"
created_at:
type: string
format: date-time
readOnly: true
description: The date and time when the payment source was created
example: "2020-01-31T23:59:59Z"
updated_at:
type: string
format: date-time
readOnly: true
description: The date and time when the payment source was last updated
example: "2020-01-31T23:59:59Z"
Lockbox:
type: object
description: |-
A US mailing address to process incoming physical mail and checks.
This is only available for lockbox payment sources.
properties:
address:
$ref: "#/components/schemas/PostalAddress"
FinancialAddress:
type: object
description: |-
A subhash containing information about the electronic bank address payment rail details.
This is only available for manual and connected_account payment sources.
properties:
ach:
$ref: "#/components/schemas/AchAddress"
AchAddress:
type: object
description: |-
A subhash containing information about the electronic bank address payment rail details.
required:
- institution_name
- account_number
- routing_number
properties:
account_number:
type: string
description: The account number of that uniquely identifies the account at the institution
example: "987654321"
routing_number:
type: string
description: The American Bankers' Association (ABA) Routing Transit Number (RTN) for the destination account.
example: "101050001"
Donation:
type: object
description: |-
A Donation is a gift of money to a nonprofit organization.
required:
- id
- payment_source_id
- amount_gross
- amount_net
- amount_fee
- currency
- purpose
- note
- created_at
properties:
id:
type: string
readOnly: true
description: The unique identifier for the donation
example: donation_01j8rs605a4gctmbm58d87mvsj
external_id:
type: string
readOnly: true
description: |-
A short human-readable identifier for the donation, useful for reconciling against your own systems.
This is the same identifier shown on the donation in the Chariot dashboard.
example: "29247869"
payment_source_id:
type: string
description: |-
The unique identifier for the payment source used to segregate deposits between various DAFs and platforms.
example: payment_source_01kew60ks7w0epkvp2bgqxrt8z
amount_gross:
type: integer
format: int64
description: |-
The original amount of the donation as intended by the donor in minor units of the currency.
For dollars, for example, this is cents.
amount_net:
type: integer
format: int64
description: |-
The amount of the donation that the nonprofit will receive after DAF and/or
platform processing fees are deducted in minor units of the currency.
For dollars, for example, this is cents.
amount_fee:
type: integer
format: int64
description: |-
The amount of the fee that was deducted by the DAF or processing platform from the donation in minor units of the currency.
For dollars, for example, this is cents.
individual_gift_amount:
type: integer
format: int64
description: |-
The amount contributed by the individual donor in minor units of the currency.
currency:
type: string
description: The [ISO 4217 code](https://en.wikipedia.org/wiki/ISO_4217) for the Transaction's currency.
example: USD
purpose:
type: string
description: |-
A description of the donor's intent for the donation.
This is useful to understand how the donor intended the donation to be used.
For example, "Where needed most" or "General Operating Support" or "Specific Campaign".
example: "Where needed most"
note:
type: string
description: |-
An informational note from the donor to the nonprofit about the donation.
This may contain a message or other useful information that the donor wants to share with the nonprofit.
example: "Please dedicate in memory of grandma"
attribution:
description: |-
A subhash containing information about how the donation is attributed.
allOf:
- $ref: "#/components/schemas/DonationAttribution"
initiation:
description: A subhash containing information about how the donation was initiated by DAFpay.
allOf:
- $ref: "#/components/schemas/DonationInitiation"
settlement:
description: A subhash containing information about how the donation was settled by Chariot.
allOf:
- $ref: "#/components/schemas/DonationSettlement"
donor_advised_fund_grant:
description: A subhash containing information about the grant from a Donor-Advised Fund sponsor.
allOf:
- $ref: "#/components/schemas/DafGrant"
platform:
description: |-
A subhash containing information about the platform that facilitated the donation.
If this is empty, then the donation was not facilitated by a platform.
allOf:
- $ref: "#/components/schemas/Platform"
corporate_match:
description: |-
A subhash containing information about the corporate match for the donation.
If this is empty, then the donation was not matched by a corporate sponsor.
allOf:
- $ref: "#/components/schemas/CorporateMatch"
properties:
type: array
description: |-
A list of custom properties for the donation.
items:
$ref: "#/components/schemas/PropertyAssignment"
artifacts:
type: array
description: |-
A list of source artifacts that were used to create the donation.
These can include the raw source files (PDFs, CSVs, etc.) that were received from upstream platforms or systems.
items:
$ref: "#/components/schemas/Artifact"
created_at:
type: string
format: date-time
readOnly: true
description: The date and time when the donation was created.
example: "2020-01-31T23:59:59Z"
updated_at:
type: string
format: date-time
readOnly: true
description: The date and time when the donation was last updated.
example: "2020-01-31T23:59:59Z"
canceled_at:
type: string
readOnly: true
format: date-time
nullable: true
description: |-
The date and time when the donation was canceled.
A non-null value indicates the donation is tied to a canceled grant initiation
and the gift was not received. Expressed in RFC 3339 format.
example: "2020-01-31T23:59:59Z"
payment_status:
type: string
readOnly: true
description: The payment status of the donation. Indicates the current state of the payment lifecycle.
example: "INCOMING_TO_CHARIOT"
enum:
- INCOMING_TO_CHARIOT
- INCOMING_OUTSIDE_CHARIOT
- RECEIVED_IN_CHARIOT
- RECEIVED_OUTSIDE_CHARIOT
- CANCELED
Artifact:
type: object
description: |-
An artifact is a source file that was used to create the donation.
properties:
id:
type: string
readOnly: true
description: The unique identifier for the artifact.
example: "artifact_01j8rs605a4gctmbm58d87mvsj"
name:
type: string
description: The name of the artifact.
example: "donation_receipt.pdf"
file_id:
type: string
description: The unique identifier for the file that the artifact is associated with.
example: "file_01j8rs605a4gctmbm58d87mvsj"
created_at:
type: string
format: date-time
readOnly: true
description: The date and time when the artifact was created.
example: "2020-01-31T23:59:59Z"
File:
type: object
description: |-
Files are objects that represent a file hosted on Chariot's servers.
If you need to download a File, create a File Link.
properties:
id:
type: string
readOnly: true
description: The unique identifier for the file.
example: "file_01j8rs605a4gctmbm58d87mvsj"
file_name:
type: string
description: The name of the file.
example: "donation_receipt.pdf"
description:
type: string
description: The description of the file.
example: "Donation receipt for donation to the nonprofit"
purpose:
type: string
description: The purpose of the file.
enum:
- integration_download
- inbound_mail_item
- inbound_email
- grant_letter
- manual_upload
content_type:
type: string
description: The MIME type of the file.
example: "application/pdf"
created_at:
type: string
format: date-time
readOnly: true
description: The date and time when the file was created.
example: "2020-01-31T23:59:59Z"
FileLink:
type: object
description: |-
A file link is a URL that can be used to download a file.
properties:
file_id:
type: string
description: The unique identifier for the file.
example: "file_01j8rs605a4gctmbm58d87mvsj"
unauthenticated_url:
type: string
description: The unauthenticated URL to download the file.
example: "https://cdn.givechariot.com/files/file.pdf"
expires_at:
type: string
format: date-time
description: The date and time when the file link will expire.
example: "2020-01-31T23:59:59Z"
PropertyAssignment:
type: object
description: |-
A property assignment is a key-value pair that is associated with a donation.
properties:
property_id:
type: string
description: The unique identifier for the property.
example: "prop_01j8rs605a4gctmbm58d87mvsj"
value:
$ref: "#/components/schemas/PropertyValue"
PropertyType:
type: string
description: The data type of a property.
enum:
- text
- enum
- user
- boolean
- date
example: "text"
ResourceType:
type: string
description: The API resource that the property is associated with.
enum:
- donation
- deposit
PropertyValue:
type: object
required:
- type
properties:
type:
$ref: "#/components/schemas/PropertyType"
text_value:
type: string
description: The text value of the property.
enum_value_id:
type: string
description: The unique identifier for the enum value.
user_value_id:
type: string
description: The unique identifier for the user.
boolean_value:
type: boolean
description: The boolean value of the property.
date_value:
type: string
format: date-time
description: The date value of the property.
empty:
type: boolean
description: |-
Whether the property value is empty.
Can use this to unset property values when assigning a property.
Property:
type: object
description: |-
A custom key-value pair that is associated with a donation.
required:
- id
- name
- resource_type
- property_type
properties:
id:
type: string
readOnly: true
description: The unique identifier for the property.
example: "prop_01j8rs605a4gctmbm58d87mvsj"
name:
type: string
description: The name of the property.
example: "Donation Purpose"
resource_type:
$ref: "#/components/schemas/ResourceType"
property_type:
$ref: "#/components/schemas/PropertyType"
options:
type: array
description: |-
The first 25 options for enum and user properties. Use the [List Property Options](/api-reference/properties/list-options) endpoint to paginate through all options.
items:
$ref: "#/components/schemas/PropertyOptionValue"
total_option_count:
type: integer
format: int32
description: |-
The total number of options for enum and user properties. When this is greater than the length of `options`, use the [List Property Options](/api-reference/properties/list-options) endpoint to paginate through all options.
PropertyOptionValue:
type: object
description: |-
A value for an enum or user property.
required:
- id
- name
properties:
id:
type: string
description: The unique identifier for the property value.
name:
type: string
description: The human readable string for the property value.
description:
type: string
description: A description of the property option.
DonationAttribution:
type: object
description: |-
A subhash containing information about how the donation is attributed.
properties:
primary_donor:
description: |-
A subhash containing information about the primary donor of the donation.
allOf:
- $ref: "#/components/schemas/Donor"
joint_donor:
description: |-
A subhash containing information about the joint donor of the donation.
allOf:
- $ref: "#/components/schemas/Donor"
CorporateMatch:
type: object
description: |-
A subhash containing information about the corporate match for the donation.
properties:
match_amount:
type: integer
format: int64
description: The amount of the corporate match for the donation in minor units of the donation currency.
company_name:
type: string
description: The name of the company that matched the donation.
example: "Google"
program_name:
type: string
description: The name of the program that matched the donation.
example: "Google Matching Grant Program"
source:
type: string
description: The source of the corporate match.
example: "Payroll"
Platform:
type: object
description: |-
A subhash containing information about the platform that facilitated the donation.
properties:
name:
type: string
description: The name of the platform.
example: "PayPal Grant Payments"
platform_grant_id:
type: string
description: The identifier for the grant within the platform's system.
example: "93492947-7894-4663-a944-f2469d0027ca"
metadata:
type: object
description: Additional key value pairs that were passed to the platform during the donation initiation.
additionalProperties:
type: string
acceptance:
description: |-
A subhash containing information about the acceptance of the grant from the platform.
This is only present if the platform requires grant acceptance before disbursing funds.
allOf:
- $ref: "#/components/schemas/PlatformAcceptance"
PlatformAcceptance:
type: object
description: |-
A subhash containing information about the acceptance of the grant from the platform.
properties:
accepted:
type: boolean
description: Whether the grant was accepted from the platform.
example: true
expires_at:
type: string
format: date-time
description: |-
The date and time when the acceptance of the grant will expire.
example: "2020-01-31T23:59:59Z"
DafGrant:
type: object
description: |-
A subhash containing information grant details from a Donor-Advised Fund sponsor.
required:
- organization_name
properties:
organization_name:
type: string
description: The name of the Donor Advised Fund sponsor.
readOnly: true
example: "Daffy Charitable Fund"
donor_fund_name:
type: string
description: The name of the donor's fund at the Donor Advised Fund sponsor.
example: "The Smith Family Fund"
program_name:
type: string
description: The name of the program at the Donor Advised Fund sponsor.
sponsor_grant_id:
type: string
description: The identifier for the grant at the Donor Advised Fund sponsor.
example: "93492947-7894-4663-a944-f2469d0027ca"
DonationSettlement:
type: object
description: |-
If the payment for the donation was received by Chariot, this object will contain additional information
about the settlement of the donation.
required:
- deposit_id
- received_at
properties:
deposit_id:
type: string
description: The unique identifier for the deposit that contains the money for the donation.
example: deposit_01kewb5vgsryzaajza5ynr06kz
received_at:
type: string
readOnly: true
format: date-time
description: |-
The date and time when the transfer of money for the donation was received by Chariot.
Received at indicates when the data for the transfer was received, which is different from the settled_at timestamp.
Expressed in RFC 3339 format.
example: "2020-01-31T23:59:59Z"
settled_at:
type: string
readOnly: true
format: date-time
description: |-
The date and time when the money for the donation was settled by Chariot.
Indicates when the funds become available to the nonprofit.
Expressed in RFC 3339 format.
example: "2020-01-31T23:59:59Z"
DonationInitiation:
type: object
description: |-
If the donation was initiated through a Chariot Connect instance (DAFpay), this object will contain additional information
about the initiation of the donation.
required:
- initiated_at
- frequency
properties:
initiated_at:
type: string
readOnly: true
format: date-time
description: Time when the donation was initiated. Expressed in RFC 3339 format.
example: "2020-01-31T23:59:59Z"
channel:
type: string
description: |-
The DAFpay integration channel used to initiate the donation.
- `INTEGRATED` - The donation was initiated through an integrated DAFpay instance where the DAF sponsor
processes the grant electronically via the DAFpay network.
- `UNINTEGRATED` - The donation was initiated through an unintegrated DAFpay flow where the donor
completes the grant manually on the DAF sponsor's website (e.g., Luminate Online, standalone embeds).
example: "INTEGRATED"
enum:
- INTEGRATED
- UNINTEGRATED
web_location_url:
type: string
description: The URL of the web location where the donation was initiated.
example: "https://www.example.com/donation/1234567890"
fundraising_platform_name:
type: string
description: |-
The name of the fundraising platform that initiated the donation.
example: "Classy"
dafpay_form:
type: string
description: |-
The DAFpay form where the donation was initiated.
example: "DAF day"
dafpay_tracking_id:
type: string
description: The tracking ID for the donation as generated by DAFpay.
example: L9E182VBGP
dafpay_metadata:
type: object
description: Additional key value pairs that were passed to DAFpay during the donation initiation.
additionalProperties:
type: string
example:
{
"funding_source": "DAF",
"funding_source_id": "daf_01j8rs605a4gctmbm58d87mvsj",
"funding_source_name": "DAF day",
}
frequency:
type: string
description: The frequency of the donation.
example: "ONE_TIME"
enum:
- ONE_TIME
- MONTHLY
Deposit:
type: object
description: |-
A Deposit is a transfer of money for a charitable donation or a batch of donations.
required:
- id
- payment_source_id
- status
- transfer
- created_at
- updated_at
properties:
id:
type: string
readOnly: true
description: The unique identifier for this object.
example: deposit_01j8rs605a4gctmbm58d87mvsj
payment_source_id:
type: string
description: The unique identifier for the payment source that contains the money for the deposit.
example: payment_source_01j8rs605a4gctmbm58d87mvsj
settled_at:
type: string
format: date-time
description: The date and time when the deposit was settled.
example: "2020-01-31T23:59:59Z"
returned_at:
type: string
format: date-time
description: The date and time when the deposit was returned.
example: "2020-01-31T23:59:59Z"
status:
type: string
description: The status of the deposit.
example: "complete"
enum:
- pending
- complete
- failed
transfer:
description: A subhash containing information about the transfer associated with the deposit.
allOf:
- $ref: "#/components/schemas/Transfer"
properties:
type: array
description: |-
A list of properties assigned to the deposit.
items:
$ref: "#/components/schemas/PropertyAssignment"
created_at:
type: string
format: date-time
description: The date and time when the deposit was created.
example: "2020-01-31T23:59:59Z"
updated_at:
type: string
format: date-time
description: The date and time when the deposit was last updated.
example: "2020-01-31T23:59:59Z"
bank_created_at:
type: string
format: date-time
description: The date and time when the bank created the deposit.
example: "2020-01-31T23:59:59Z"
Transfer:
type: object
description: A subhash containing information about the transfer associated with the deposit.
required:
- amount
- currency
- financial_account_id
properties:
amount:
type: integer
format: int64
description: The amount of the transfer in minor currency units. For example, for dollars, this is cents.
example: 10000
currency:
type: string
description: The [ISO 4217 code](https://en.wikipedia.org/wiki/ISO_4217) for the transfer's currency.
example: USD
financial_account_id:
type: string
description: The unique identifier for the financial account that the transfer was made to.
example: "fa_01j8rs605a4gctmbm58d87mvsj"
description:
type: string
description: A description of the transfer.
example: "Disbursement to nonprofit"
inbound_account_transfer:
description: A subhash containing information about the inbound account transfer associated with the deposit.
allOf:
- $ref: "#/components/schemas/InboundAccountTransfer"
inbound_ach_transfer:
description: A subhash containing information about the inbound ACH transfer associated with the deposit.
allOf:
- $ref: "#/components/schemas/InboundAchTransfer"
check_deposit:
description: A subhash containing information about the check deposit associated with the deposit.
allOf:
- $ref: "#/components/schemas/CheckDeposit"
InboundAccountTransfer:
type: object
description: |-
An instant transfer of funds between two financial accounts.
This is the preferred method of transferring funds for Grantmakers within Chariot's Network.
required:
- created_at
properties:
created_at:
type: string
format: date-time
description: The date and time the account transfer was created
example: "2020-01-31T23:00:00Z"
readOnly: true
InboundAchTransfer:
type: object
description: |-
An ACH transfer initiated outside of Chariot to your financial account.
properties:
standard_entry_class_code:
type: string
description: The Standard Entry Class (SEC) code for the ACH transfer.
example: "WEB"
company_entry_description:
type: string
description: The company entry description for the ACH transfer.
example: "GRANTPMT"
originator_routing_number:
type: string
description: The routing number of the originator of the ACH transfer.
example: "1234567890"
originator_company_name:
type: string
description: The name of the originator of the ACH transfer.
example: "Charity Good"
trace_number:
type: string
description: The trace number for the ACH transfer.
example: "1234567890"
effective_date:
type: string
format: date-time
description: The effective date for the ACH transfer.
example: "2020-01-31T23:00:00Z"
status:
type: string
description: The status of the ACH transfer.
example: "accepted"
enum:
- pending
- declined
- accepted
- returned
CheckDeposit:
type: object
description: |-
A check deposit represents a physical check that is deposited into a financial account.
properties:
auxiliary_on_us:
type: string
description: |-
An additional line of metadata printed on the check.
This typically includes the check number for business checks.
example: "102"
routing_number:
type: string
description: |-
The routing number printed on the check.
This is a routing number for the bank that issued the check.
example: "101050001"
submitted_at:
type: string
format: date-time
description: The date and time the check deposit was submitted.
example: "2020-01-31T23:00:00Z"
status:
type: string
description: The status of the check deposit.
example: "deposited"
enum:
- pending
- deposited
- rejected
- returned
Connect:
type: object
description: |-
A Connect represents an instance of Chariot Connect for a particular nonprofit. A nonprofit organization will create Connect objects in order to integrate Chariot Connect into their websites or fundraising platforms to start accepting donations directly from Donor Advised Funds. Each nonprofit can have multiple Connect objects where each one represents a logical separation for how the organization wants to organize their sources of donations. For example, they might have 2 Connect instances, one that they use to integrate Chariot Connect directly on their website and the other that they provide to a 3rd party fundraising platform. On the client side, Chariot Connect is instantiated with the `id` of the Connect object, also called the `cid`. A connect object also contains an `apiKey`. This is useful for nonprofits to provide to fundraising platforms on their behalf to programatically integrate Chariot Connect and access resources and information created from the Connect instance through various Chariot API endpoints. More information on integrating Chariot Connect into a client-side application can be found here: https://givechariot.readme.io
required:
- id
- apiKey
properties:
id:
type: string
readOnly: true
description: |-
The unique identifier for this object. This is also the 'publishable' cid to use for initializing Connect for client-side integration.
example: test_connect123
name:
type: string
description: A human readable name for the connect, optional.
example: website
apiKey:
type: string
readOnly: true
description: (deprecated) A secure token that can be used to make M2M API calls to read data generated by this object.
example: test_apiTokenABC
active:
type: boolean
description: |-
A flag to indicate if this connect is active. If true, then this Connect can process donations and grants, otherwise this Connect cannot process grants.
example: true
createdAt:
type: string
readOnly: true
format: date-time
description: Time when this object was created. Expressed in RFC 3339 format.
example: "2020-01-31T23:00:00Z"
updatedAt:
type: string
readOnly: true
format: date-time
description: Time when this object was last updated. Expressed in RFC 3339 format.
example: "2020-01-31T23:59:59Z"
createdBy:
type: string
readOnly: true
description: ID of the user who created this object.
example: auth0-user-id-123
archived:
type: boolean
readOnly: true
description: A flag to indicate if this object is marked for deletion.
example: false
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object.
additionalProperties:
type: string
Daf:
type: object
description: |-
A Donor-Advised Fund, or `DAF` for short, is a special-purpose, tax-advantaged charitable account.
For more information, please see the [IRS website](https://www.irs.gov/charities-non-profits/charitable-organizations/donor-advised-funds) for a full description.
In the case that a DAF is supported, a donor will be able to initiate a grant directly through DAFpay.
required:
- id
- orgName
- address
- address2
- city
- state
- zip
- supported
- minimumGrantAmount
- institutionDown
properties:
id:
type: string
readOnly: true
description: The unique identifier for this object.
example: 0bf40881-8ee2-47fb-98ca-f58c7999aa34
orgName:
type: string
readOnly: true
description: A human readable name for the DAF.
example: website
address:
type: string
readOnly: true
description: The first address line.
example: 123 Main St.
address2:
type: string
readOnly: true
description: The second address line.
example: Apt 100
city:
type: string
readOnly: true
description: The city name for the address.
example: New York City
state:
type: string
readOnly: true
description: The state name for the address.
example: New York
zip:
type: string
readOnly: true
description: The zipcode for the address.
example: "12345"
supported:
type: boolean
readOnly: true
description: A flag to indicate if this DAF is supported by DAFpay.
example: false
minimumGrantAmount:
type: number
readOnly: true
description: The minimum grant amount in cents allowed for this DAF.
example: 5000
institutionDown:
type: boolean
readOnly: true
description: A flag to indicate if the institution is down.
example: false
DonorAccountStatus:
type: string
description: |-
The status of a [Donor Account](/api/donor-accounts).
* `pending`: The Donor Account has been created but the DAF has not yet approved or rejected it.
* `approved`: The DAF has verified the donor's identity and Grants from this account can be processed.
* `rejected`: The DAF has rejected the Donor Account. Grants from this account will not be processed.
enum:
- pending
- approved
- rejected
example: pending
DonorAccount:
type: object
description: |-
A Donor Account represents a DAFpay donor identity at a DAF.
Donor Accounts are the bridge between a donor's verified DAFpay identity (email, profile) and the donor's record at the DAF.
An Account must reach `approved` status — via an [Authorization Token](/api/authorization-tokens) — before its Grant Requests can be processed.
A Donor Account may optionally have one or more [Giving Pools](/api/giving-pools) associated with it (see [Giving Pool](/api/giving-pools)). The relationship is many-to-one from `GivingPool` to `DonorAccount` — each Giving Pool belongs to exactly one Donor Account.
There are two flows for how an Account reaches `approved`:
- **Donor-Initiated Verification**: After a donor submits a Grant Request, DAFpay issues a one-time [Authorization Token](/api/authorization-tokens) and emails the `code` to the donor. The donor provides the code to the DAF, who calls [Verify Authorization Token](/api/authorization-tokens/verify) to approve the account.
- **DAF-Initiated Setup**: The DAF creates the Donor Account and an Authorization Token in advance (e.g. when a donor opts in via the DAF portal). The donor enters the token's `code` into DAFpay during profile setup, automatically approving the account.
See the [Donor Accounts overview](/guides/dafpay/donor-accounts/overview) for a full discussion of these flows.
required:
- id
- status
- donor
- created_at
- updated_at
properties:
id:
type: string
readOnly: true
description: The unique identifier for this object.
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status:
$ref: "#/components/schemas/DonorAccountStatus"
donor:
type: object
description: |-
The donor's identity and profile information.
required:
- email
properties:
email:
type: string
readOnly: true
description: |-
The donor's email. This is the donor's verified identifier — DAFpay verifies ownership via an email verification flow before a Donor Account is created.
example: "warrenBuffet@example.com"
first_name:
type: string
nullable: true
description: |-
The donor's first name as captured during DAFpay profile setup. May be null for Donor Accounts created via [Create Donor Account](/api/donor-accounts/create) before the donor has authenticated.
example: "Warren"
last_name:
type: string
nullable: true
description: |-
The donor's last name as captured during DAFpay profile setup. May be null for Donor Accounts created via [Create Donor Account](/api/donor-accounts/create) before the donor has authenticated.
example: "Buffet"
phone:
type: string
nullable: true
description: |-
The donor's phone number as captured during DAFpay profile setup.
DAFpay does not currently verify ownership of the phone number. Treat this field as donor-asserted information.
example: "+12125550100"
external_id:
type: string
nullable: true
description: |-
The DAF's internal identifier for this Donor Account. Can be set on creation or via [Update Donor Account](/api/donor-accounts/update) to link the DAFpay Donor Account to the donor's record in the DAF's own systems.
example: "ACME-DAF-DONOR-1042"
approval:
type: object
nullable: true
readOnly: true
description: |-
Details about the approval decision. Present when `status` is `approved`; otherwise `null`.
properties:
approved_at:
type: string
readOnly: true
format: date-time
description: Time when the Donor Account was approved. Expressed in RFC 3339 format.
example: "2026-04-02T18:30:00Z"
approved_by:
type: string
readOnly: true
description: |-
Identifier of the actor that approved this Donor Account. For DAF-initiated approvals, this is the DAF's API key principal. For automatic approvals via token verification, this is `system:authorization_token`.
example: "daf:fid_01jpjenf5q6cawy43yxfcrxhct"
rejection:
type: object
nullable: true
readOnly: true
description: |-
Details about the rejection decision. Present when `status` is `rejected`; otherwise `null`.
properties:
rejected_at:
type: string
readOnly: true
format: date-time
description: Time when the Donor Account was rejected. Expressed in RFC 3339 format.
example: "2026-04-02T18:30:00Z"
rejected_by:
type: string
readOnly: true
description: |-
Identifier of the actor that rejected this Donor Account. For DAF-initiated rejections, this is the DAF's API key principal.
example: "daf:fid_01jpjenf5q6cawy43yxfcrxhct"
rejection_reason:
type: string
readOnly: true
description: |-
A human-readable reason provided by the DAF when rejecting the Donor Account.
example: "Donor could not be located in our records."
disabled:
type: boolean
readOnly: true
description: |-
Whether this Donor Account is currently disabled. A disabled Donor Account remains `approved` but cannot submit new Grant Requests — call [Enable Donor Account](/api/donor-accounts/enable) to re-enable it. Disabling is only available for accounts in `approved` status.
default: false
example: false
created_at:
type: string
readOnly: true
format: date-time
description: Time when this object was created. Expressed in RFC 3339 format.
example: "2026-04-01T12:00:00Z"
updated_at:
type: string
readOnly: true
format: date-time
description: Time when this object was last updated. Expressed in RFC 3339 format.
example: "2026-04-02T18:30:00Z"
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object.
additionalProperties:
type: string
DonorAuthorizationTokenStatus:
type: string
description: |-
The status of a [Donor Authorization Token](/api/authorization-tokens).
* `pending`: The token has been issued but not yet verified.
* `verified`: The token has been verified and can no longer be used.
* `revoked`: The token was explicitly revoked before being verified.
* `expired`: The token's `expires_at` has passed and it can no longer be verified.
enum:
- pending
- verified
- revoked
- expired
example: pending
DonorAuthorizationToken:
type: object
description: |-
A Donor Authorization Token is a single-use binding credential that ties a [Donor Account](/api/donor-accounts) to a verified identity exchange between DAFpay and the DAF.
Tokens have two creation paths:
- **DAF-Initiated Setup**: The DAF creates a Donor Account and then a token, surfaces the token's `code` to the donor via their portal, and the donor enters the `code` into DAFpay to approve their account.
- **Donor-Initiated Verification**: After a donor submits a Grant Request without an approved Donor Account, DAFpay automatically creates a token and emails the `code` to the donor. The DAF later receives the `code` from the donor and calls [Verify Authorization Token](/api/authorization-tokens/verify) to approve the linked Donor Account.
Tokens are single-use: once verified, the token's status becomes `verified` and the `code` cannot be used again.
required:
- id
- donor_account_id
- status
- created_at
- expires_at
properties:
id:
type: string
readOnly: true
description: The unique identifier for this object.
example: "auth_token_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id:
type: string
readOnly: true
description: |-
The ID of the [Donor Account](/api/donor-accounts) this token is bound to.
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status:
$ref: "#/components/schemas/DonorAuthorizationTokenStatus"
code:
type: string
readOnly: true
description: |-
The token's secret code value.
The `code` is **only returned in the response of [Create Authorization Token](/api/authorization-tokens/create)**. It is omitted from all other responses (Get, List). If the code is lost, [revoke](/api/authorization-tokens/revoke) the token and create a new one.
The format is a 12-character alphanumeric string designed to be easy for donors to read aloud or copy. Codes are not case-sensitive when verified.
example: "DAFP-7K3X-9M4Q"
created_at:
type: string
readOnly: true
format: date-time
description: Time when the token was issued. Expressed in RFC 3339 format.
example: "2026-04-01T12:00:00Z"
expires_at:
type: string
readOnly: true
format: date-time
description: |-
Time at which this token will expire and can no longer be verified. Defaults to 30 days after creation; configurable via the `expires_in` parameter on [Create Authorization Token](/api/authorization-tokens/create).
example: "2026-05-01T12:00:00Z"
verified_at:
type: string
readOnly: true
format: date-time
description: |-
Time at which the token was verified. Only set when `status` is `verified`.
example: "2026-04-02T18:30:00Z"
revoked_at:
type: string
readOnly: true
format: date-time
description: |-
Time at which the token was revoked. Only set when `status` is `revoked`.
example: "2026-04-02T18:30:00Z"
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object.
additionalProperties:
type: string
GrantRequestStatus:
type: string
enum:
- awaiting_account_decision
- pending
- submitted
- rejected
description: |-
The lifecycle status of a Grant Request.
- `awaiting_account_decision`: The linked Donor Account is not yet `approved`. Advances automatically when the account is approved.
- `pending`: The Donor Account is approved and the Grant Request is awaiting your decision.
- `submitted`: You have submitted the grant in your system. Terminal.
- `rejected`: You have rejected the grant and it will not be processed. Terminal.
GrantRequestFrequency:
type: string
enum:
- one_time
- monthly
- quarterly
- annual
description: |-
How often the donor intends this grant to recur. Only frequencies enabled in your DAF Provider settings will appear on Grant Requests.
GrantRequestDonorContactAddress:
type: object
description: The donor's mailing address at the time of the Grant Request.
properties:
line1:
type: string
line2:
type: string
nullable: true
city:
type: string
state:
type: string
zip:
type: string
GrantRequestDonorContact:
type: object
description: A snapshot of the donor's contact information captured for this Grant Request.
properties:
name:
type: string
email:
type: string
format: email
phone:
type: string
address:
$ref: "#/components/schemas/GrantRequestDonorContactAddress"
GrantRequest:
type: object
description: |-
A Grant Request is a donation intent submitted by a donor through the DAFpay payment option, addressed to a specific nonprofit.
The DAF Provider is responsible for processing it in their own system and reporting the outcome back to DAFpay via the [Submit](/api/grant-requests/submit) or [Reject](/api/grant-requests/reject) endpoints.
All amounts are in US dollars.
required:
- id
- donor_account_id
- status
- ein
- amount_cents
- frequency
- form_url
- created_at
- updated_at
properties:
id:
type: string
readOnly: true
description: The unique identifier for this Grant Request.
example: "grant_req_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id:
type: string
description: The ID of the [Donor Account](/api/donor-accounts) this Grant Request belongs to.
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
giving_pool_id:
type: string
nullable: true
description: The ID of the [Giving Pool](/api/giving_pools) the grant is being made from. Present when the donor selected a specific giving pool.
example: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
status:
$ref: "#/components/schemas/GrantRequestStatus"
ein:
type: string
description: The EIN of the recipient nonprofit.
example: "12-3456789"
nonprofit_name:
type: string
description: The name of the recipient nonprofit at the time of the Grant Request.
example: "American Red Cross"
amount_cents:
type: integer
format: int64
description: The grant amount in cents (USD).
example: 10000
frequency:
$ref: "#/components/schemas/GrantRequestFrequency"
form_url:
type: string
format: uri
description: The URL of the page where the donor submitted the DAFpay gift.
example: "https://example.org/donate"
purpose:
type: string
nullable: true
description: The donor's stated purpose for the grant.
note:
type: string
nullable: true
description: An optional note from the donor to the nonprofit.
donor_contact:
$ref: "#/components/schemas/GrantRequestDonorContact"
rejection_reason:
type: string
nullable: true
description: The reason provided when the Grant Request was rejected. Set when status transitions to `rejected`.
created_at:
type: string
readOnly: true
format: date-time
description: Time when this object was created, expressed in RFC 3339 format.
example: "2026-04-01T09:00:00Z"
updated_at:
type: string
readOnly: true
format: date-time
description: Time when this object was last updated, expressed in RFC 3339 format.
example: "2026-04-01T12:00:00Z"
GivingPool:
type: object
description: |-
A Giving Pool represents a named giving pool within a donor's DAF account (e.g. "Smith Family Fund" within a Fidelity Charitable account).
Giving Pools are optional — not every DAF models giving pools, and even within DAFs that do, a [Donor Account](/api/donor-accounts) may exist without any Giving Pools. When present, a Donor Account may have one or more Giving Pools. Each Giving Pool belongs to exactly one Donor Account via `donor_account_id`.
required:
- id
- name
- donor_account_id
- created_at
- updated_at
properties:
id:
type: string
readOnly: true
description: The unique identifier for this Giving Pool.
format: uuid
example: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
name:
type: string
description: The display name of the Giving Pool. This is the name that the Donor will see when they are selecting a Giving Pool in DAFpay.
example: "Smith Family Fund"
donor_account_id:
type: string
description: The ID of the [Donor Account](/api/donor-accounts) this Giving Pool belongs to.
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
created_at:
type: string
readOnly: true
format: date-time
description: Time when this object was created, expressed in RFC 3339 format.
example: "2026-01-15T09:00:00Z"
updated_at:
type: string
readOnly: true
format: date-time
description: Time when this object was last updated, expressed in RFC 3339 format.
example: "2026-04-01T12:00:00Z"
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object.
additionalProperties:
type: string
Grant:
type: object
description: |-
A Grant represents a successfully initiated grant request with a Donor Advised Fund. Grants are created when a person interacts with an instance of Chariot Connect and successfully submits a grant and completes the workflow. There can be many grants associated with a Connect object and therefore a nonprofit.
required:
- id
- workflowSessionId
- fundId
- amount
properties:
id:
type: string
readOnly: true
description: The unique identifier for the object
format: uuid
example: cfe09e64-6a74-4dab-a565-361185a6f248
userFriendlyId:
type: string
readOnly: true
description: Often referred to as the "Chariot ID", this is the ID that will be included in the payment from the DAF provider.
example: chariot-1234455
deprecated: true
trackingId:
type: string
readOnly: true
description: The tracking ID for the grant
example: L9E182VBGP
workflowSessionId:
type: string
readOnly: true
description: ID of the Connect Workflow Session associated with this grant
format: uuid
example: 2d4b2a43-a5b4-4be1-ad1f-f932016ca4a6
fundId:
type: string
readOnly: true
description: ID of the donor advised fund
example: daf-id
donor_account_id:
type: string
readOnly: true
description: |-
ID of the [Donor Account](/api/donor-accounts) that this grant was submitted from.
Present on grants submitted by donors who authenticated through the DAFpay Donor Account flow.
Grants submitted without a linked Donor Account will not have this field set.
example: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
externalGrantId:
type: string
description: ID of the grant associated with the donor advised fund
example: 897823sdjf8sfjs
createdAt:
type: string
readOnly: true
format: date-time
description: Time when this object was created; expressed in RFC 3339 format
example: "2020-01-31T23:00:00Z"
updatedAt:
type: string
readOnly: true
format: date-time
description: Time when this object was last updated; expressed in RFC 3339 format
example: "2020-01-31T23:59:59Z"
amount:
type: number
format: integer
description: The grant amount expressed in units of whole cents
example: 15000
status:
type: string
description: The status of the grant
example: Initiated
feeDetail:
type: object
readOnly: true
description: The fee detail of the grant
properties:
total:
type: number
format: integer
description: The total fee amount expressed in units of cents
example: 1500
contributions:
type: array
items:
$ref: "#/components/schemas/ContributionFeeDetail"
description: The list of fee contributions for this grant
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object
additionalProperties:
type: string
firstName:
type: string
description: The donor's first name
example: "Warren"
lastName:
type: string
description: The donor's last name
example: "Buffet"
phone:
type: string
description: The donor's phone number
example: "1237861020"
email:
type: string
description: The donor's email
example: "warrenBuffet@example.com"
note:
type: string
description: An note inputted by the user at submisson
example: "Please dedicate in memory of grandma"
statuses:
type: array
items:
$ref: "#/components/schemas/GrantStatus"
description: The list of grant statuses for this grant
paymentChannel:
type: string
readOnly: true
description: |-
The payment channel for the grant. This is useful to know how the grant will be sent.
The payment channel will be one of the following:
- dafpay_network: Grant will be sent to the DAFPay Network 501(c)(3) nonprofit organization (EIN: 93-1372175). The DAFPay Network will then review and process the grant and send the funds to the intended recipient.
- direct: Grant will be sent directly to the intended recipient.
enum:
- dafpay_network
- direct
example: direct
address:
$ref: "#/components/schemas/GrantAddress"
RecurringGrant:
type: object
description: |-
A RecurringGrant represents a successfully initiated recurring grant request with a Donor Advised Fund.
RecurringGrants are created when a person interacts with an instance of Chariot Connect and successfully submits a recurring grant and completes the workflow.
On creation, each RecurringGrant object will also have a Grant object created to represent the first grant of the recurring grant.
There can be many grants associated with the same recurring grant.
required:
- id
- workflowSessionId
- fundId
- amount
- frequency
properties:
id:
type: string
readOnly: true
description: The unique identifier for the object
format: uuid
example: cfe09e64-6a74-4dab-a565-361185a6f248
trackingId:
type: string
readOnly: true
description: The tracking ID for the grant
example: L9E182VBGP
workflowSessionId:
type: string
readOnly: true
description: ID of the Connect Workflow Session associated with this grant
format: uuid
example: 2d4b2a43-a5b4-4be1-ad1f-f932016ca4a6
fundId:
type: string
readOnly: true
description: ID of the donor advised fund
example: daf-id
frequency:
type: string
description: |-
How often the DAF provider will submit the recurring grant. At the moment, monthly is the only supported frequency.
enum:
- MONTHLY
example: MONTHLY
externalRecurringGrantId:
type: string
description: ID of the grant associated with the donor advised fund
example: 897823sdjf8sfjs
createdAt:
type: string
readOnly: true
format: date-time
description: Time when this object was created; expressed in RFC 3339 format
example: "2020-01-31T23:00:00Z"
updatedAt:
type: string
readOnly: true
format: date-time
description: Time when this object was last updated; expressed in RFC 3339 format
example: "2020-01-31T23:59:59Z"
amount:
type: number
format: integer
description: The grant amount expressed in units of whole cents
example: 15000
firstName:
type: string
description: The donor's first name
example: "Warren"
lastName:
type: string
description: The donor's last name
example: "Buffet"
phone:
type: string
description: The donor's phone number
example: "1237861020"
email:
type: string
description: The donor's email
example: "warrenBuffet@example.com"
note:
type: string
description: An note inputted by the user at submisson
example: "Please dedicate in memory of grandma"
address:
$ref: "#/components/schemas/GrantAddress"
ContributionFeeDetail:
type: object
required:
- name
- amount
properties:
name:
type: string
description: |
The name of the party charging the fee. This is an informational field.
If you need to differentiate between fees charged by different parties, you should use the `feeType` field.
example: "Chariot"
amount:
type: number
format: integer
description: The fee contribution amount expressed in units of cents
example: 1500
feeType:
type: string
description: |
This indicates the source of a fee contribution.
* chariot: Chariot's processing fee
* daf: The DAF's processing fee
* fundraising_application: The fundraising application's processing fee
example: "chariot"
enum:
- chariot
- daf
- fundraising_application
GrantStatus:
type: object
required:
- id
- createdAt
- status
properties:
id:
type: string
readOnly: true
description: The unique identifier for the object
format: uuid
example: cfe09e64-6a74-4dab-a565-361185a6f248
createdAt:
type: string
readOnly: true
format: date-time
description: Time when this object was created; expressed in RFC 3339 format
example: "2020-01-31T23:00:00Z"
status:
type: string
enum:
- awaiting_account_approval
- awaiting_daf_submission
- initiated
- canceled
description: |
The status of the grant.
* awaiting_account_approval: The linked Donor Account is not yet `approved`. The grant advances automatically when the Account is approved.
* awaiting_daf_submission: The Account is approved and the grant is ready for the DAF to submit in their system.
* initiated: The DAF has submitted the grant. Terminal.
* canceled: The DAF has canceled the grant. Terminal.
example: awaiting_daf_submission
comment:
type: string
description: The user comment for the update
example: The grant has been received by the nonprofit
UnintegratedGrant:
type: object
description: |-
An Unintegrated Grant represents a grant requested through a provider that Chariot does not support.
Unintegrated grants should be treated as donation intents as Chariot can not guarantee that the grant was submitted or will be fulfilled.
Nonprofits should use the information provided in the unintegrated grant to follow up with the donor and/or the provider to check the status of the grant.
These are sometimes referred to as "Manual Grants".
required:
- id
- workflowSessionId
- fundId
- amount
properties:
id:
type: string
readOnly: true
description: The unique identifier for the object
format: uuid
example: cfe09e64-6a74-4dab-a565-361185a6f248
userFriendlyId:
type: string
readOnly: true
description: Often referred to as the "Chariot ID", this is the ID that will be included in the payment from the DAF provider.
example: "1234455"
deprecated: true
trackingId:
type: string
readOnly: true
description: The tracking ID for the unintegrated grant
example: L9E182VBGP
workflowSessionId:
type: string
readOnly: true
description: ID of the Connect Workflow Session associated with this grant
format: uuid
example: 2d4b2a43-a5b4-4be1-ad1f-f932016ca4a6
fundId:
type: string
readOnly: true
description: ID of the donor advised fund
example: daf-id
createdAt:
type: string
readOnly: true
format: date-time
description: Time when this object was created; expressed in RFC 3339 format
example: "2020-01-31T23:00:00Z"
updatedAt:
type: string
readOnly: true
format: date-time
description: Time when this object was last updated; expressed in RFC 3339 format
example: "2020-01-31T23:59:59Z"
amount:
type: number
format: integer
description: The grant amount expressed in units of whole cents
example: 15000
status:
type: string
description: |-
The status of the unintegrated grant.
enum:
- Unknown
- Completed
- Canceled
example: Unknown
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object
additionalProperties:
type: string
firstName:
type: string
description: The donor's first name
example: "Warren"
lastName:
type: string
description: The donor's last name
example: "Buffet"
phone:
type: string
description: The donor's phone number
example: "1237861020"
email:
type: string
description: The donor's email
example: "warrenBuffet@example.com"
address:
$ref: "#/components/schemas/GrantAddress"
note:
type: string
description: An note inputted by the user at submisson
example: "Please dedicate in memory of grandma"
paymentChannel:
type: string
readOnly: true
description: |-
The payment channel for the unintegrated grant. This is useful to know how the grant will be sent.
The payment channel for unintegrated grants will always be:
- offline: Grant was initiated outside of Chariot so we're unable to confirm how the grant will be sent.
enum:
- offline
example: offline
FinancialAccount:
type: object
description: |-
A financial account represents a financial, depository (bank) account managed by Chariot.
Chariot maintains a ledger and balances for the account.
This account should be funded and have a sufficient available balance before disbursements can be created.
Chariot is a financial technology company, not a bank. Chariot Deposit Accounts come through our banking services partner, Column, N.A.
required:
- id
- name
- account_type
- bank_provider
- created_at
- updated_at
properties:
id:
type: string
description: The unique identifier for the account
example: "account_01jpjenf5q6cawy43yxfcrxhct"
account_type:
type: string
description: The type of account
enum:
- disbursements
- processing
example: "disbursements"
bank_provider:
type: string
description: The bank provider for the account
example: "mock_alpha"
created_at:
type: string
format: date-time
description: The date and time the account was created
example: "2020-01-31T23:00:00Z"
updated_at:
type: string
format: date-time
description: The date and time the account was last updated
example: "2020-01-31T23:00:00Z"
FinancialAccountBalance:
type: object
required:
- current_balance
- available_balance
- timestamp
properties:
current_balance:
type: number
description: The current balance is the amount of money in the account. This value is in minor currency units (USD cents).
example: 10000
available_balance:
type: number
description: The available balance is the amount of money in the account that is available to be spent or transferred. This value is in minor currency units (USD cents).
example: 10000
timestamp:
type: string
format: date-time
description: The time the balance was retrieved
example: "2020-01-31T23:00:00Z"
Address:
type: object
required:
- city
- country
- line1
- postal_code
- state
properties:
city:
type: string
description: "City, district, suburb, town, or village. Maximum length: 255 characters."
example: "New York"
country:
type: string
description: "Two-letter country code (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)"
example: "US"
line1:
type: string
description: "Address line 1 (e.g. street, PO Box, or company name). Maximum length: 255 characters."
example: "123 Main St."
line2:
type: string
description: "Address line 2 (e.g. apartment, suite, unit, or building). Maximum length: 255 characters."
postal_code:
type: string
description: "ZIP or postal code. Maximum length: 40 characters."
example: "12345"
state:
type: string
description: "State, county, province, or region"
example: "NY"
GrantAddress:
type: object
properties:
line1:
type: string
description: "Address line 1 (e.g. street, PO Box, or company name). Maximum length: 255 characters."
line2:
type: string
description: "Address line 2 (e.g. apartment, suite, unit, or building). Maximum length: 255 characters."
city:
type: string
description: "City, district, suburb, town, or village.. Maximum length: 255 characters."
state:
type: string
description: "State, county, province, or region. Maximum length: 255 characters."
postalCode:
type: string
description: "ZIP or postal code. Maximum length: 255 characters."
PostalAddress:
type: object
description: |-
A postal address is a mailing address where physical mail can be received.
Postal addresses can be used to receive paper checks.
required:
- city
- country
- line1
- postal_code
- state
properties:
city:
type: string
description: City, district, suburb, town, or village.
example: "New York"
country:
type: string
description: Two-letter country code (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
example: "US"
line1:
type: string
description: Address line 1 (e.g. street, PO Box, or company name)
example: "123 Main St."
line2:
type: string
description: Address line 2 (e.g. apartment, suite, unit, or building)
example: "Suite 2504"
postal_code:
type: string
description: ZIP or postal code
example: "12345"
state:
type: string
description: State, county, province, or region
example: "NY"
Disbursement:
type: object
description: A disbursement moves funds to a verified organization.
required:
- id
- organization_id
- program_id
- amount
properties:
id:
type: string
description: The unique identifier for the disbursement
example: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
readOnly: true
organization_id:
type: string
description: The unique identifier for the organization that will receive the payment
example: "org_01jpjenf5q6cawy43yxfcrxhct"
organization:
$ref: "#/components/schemas/Organization"
program_id:
type: string
description: The unique identifier for the program that the disbursement belongs to
example: "program_01jpjenf5q6cawy43yxfcrxhct"
amount:
type: integer
format: int64
description: The payment amount in USD cents. Must be a positive amount.
example: 10000
description:
type: string
description: A description for the disbursement
example: "Annual grant to Acme Inc."
auto_fund:
type: boolean
description: |-
Whether just-in-time (JIT) funding is enabled for this disbursement. When true, Chariot automatically creates an inbound transfer for the disbursement amount when it is approved.
example: false
readOnly: true
created_at:
type: string
format: date-time
description: The date and time the disbursement was created
example: "2020-01-31T23:00:00Z"
readOnly: true
updated_at:
type: string
format: date-time
description: The date and time the disbursement was last updated
example: "2020-01-31T23:00:00Z"
readOnly: true
status:
$ref: "#/components/schemas/DisbursementStatus"
cancelation:
$ref: "#/components/schemas/DisbursementCancelation"
approval:
$ref: "#/components/schemas/DisbursementApproval"
rejection:
$ref: "#/components/schemas/DisbursementRejection"
verification:
$ref: "#/components/schemas/DisbursementVerification"
stop:
$ref: "#/components/schemas/DisbursementStop"
program_details:
$ref: "#/components/schemas/ProgramDetails"
transfers:
type: array
description: |-
The list of transfers for the disbursement.
This can have multiple items if the disbursement's underlying payment was retried multiple times.
For example, if a check was returned or stopped and the disbursement was retried as an ACH transfer.
If the disbursement was not retried, this will have a single item.
items:
$ref: "#/components/schemas/DisbursementTransfer"
bypass_chariot_organization_verification:
type: boolean
description: |-
Whether the disbursement bypasses Chariot's organization verification.
When true, the disbursement proceeds without waiting for Chariot to verify the organization.
example: false
transactions:
type: array
description: The list of transactions for the disbursement
items:
$ref: "#/components/schemas/Transaction"
idempotency_key:
type: string
description: |-
The `Idempotency-Key` header value the disbursement was created with. Only set for single-create disbursements; bulk-created disbursements omit this field.
example: "8e91b2f3-d7c4-4a59-9a91-72a40b1f2c3d"
readOnly: true
DisbursementStatus:
type: string
description: |-
The lifecycle status of the disbursement.
Possible values include:
- `pending_approval`: The disbursement is awaiting approval from the grantmaker
- `canceled`: The disbursement was canceled by the grantmaker
- `awaiting_verification`: The disbursement is awaiting verification from Chariot
- `rejected`: The disbursement was rejected by Chariot before being submitted
- `validating_organization`: Validating recipient organization's payment and contact information before submission.
- `awaiting_account_claim`: The disbursement is awaiting account claim by the nonprofit or check delay expiration
- `awaiting_balance`: The disbursement is awaiting sufficient grantmaker balance
- `submitted`: The disbursement payment has been submitted to the payment network and is being processed
- `stopped`: The disbursement payment was stopped after it was submitted
- `completed`: The disbursement payment has been completed and funds have been received by the receiving organization
- `failed`: The disbursement payment failed or the receiving organization did not receive the payment
To see a description of each status, see the "Disbursement Lifecycle" section of the Chariot documentation.
example: "pending_approval"
enum:
- pending_approval
- canceled
- awaiting_verification
- rejected
- validating_organization
- awaiting_account_claim
- awaiting_balance
- submitted
- stopped
- completed
- failed
VerificationRequestStatus:
type: string
description: |-
The status of the verification request.
Possible values include:
- `needs_review`: The request has been submitted and is awaiting review by Chariot's compliance team
- `verified`: The organization has been verified as tax-exempt and eligible for disbursements
- `failed`: Chariot's compliance team determined the organization is not eligible
example: "needs_review"
enum:
- needs_review
- verified
- failed
VerificationRequestAddress:
type: object
description: A mailing address for the organization being verified.
required:
- line1
- city
- state
- zip_code
properties:
line1:
type: string
description: Street address line 1
example: "123 Main St"
line2:
type: string
description: Street address line 2 (suite, unit, etc.)
example: "Suite 100"
city:
type: string
description: City
example: "San Francisco"
state:
type: string
description: Two-letter US state code (e.g. "CA", "NY")
example: "CA"
zip_code:
type: string
description: ZIP or postal code
example: "94105"
VerificationRequest:
type: object
description: |-
A verification request allows grantmakers to request that Chariot's compliance team verify an unlisted organization,
enabling disbursements to nonprofits not yet in Chariot's database.
required:
- id
- ein
- organization_name
- organization_id
- status
properties:
id:
type: string
description: Unique identifier for the verification request
example: "vr_01jpjen1s23s29kkmnjsb6fzga"
readOnly: true
ein:
type: string
description: The EIN of the organization being verified
example: "123456789"
organization_name:
type: string
description: The name of the organization as provided by the grantmaker
example: "Local Community Foundation"
organization_id:
type: string
description: |-
The ID of the Organization record for the nonprofit being verified.
example: "org_01jpjenf5q6cawy43yxfcrxhct"
status:
$ref: "#/components/schemas/VerificationRequestStatus"
website:
type: string
description: The organization's website URL
example: "https://localfoundation.org"
recommended_mailing_address:
$ref: "#/components/schemas/VerificationRequestAddress"
verified_at:
type: string
format: date-time
description: When the organization was verified as tax-exempt and eligible for disbursements
readOnly: true
failed_at:
type: string
format: date-time
description: When the verification request was rejected
readOnly: true
created_at:
type: string
format: date-time
description: When the verification request was created
example: "2020-01-31T23:00:00Z"
readOnly: true
updated_at:
type: string
format: date-time
description: When the verification request was last updated
example: "2020-01-31T23:00:00Z"
readOnly: true
DisbursementCancelation:
type: object
description: |-
If your account requires approvals for disbursements and the disbursement was not approved, this will contain the details of the cancelation.
properties:
canceled_by:
type: string
description: If the disbursement was canceled by a user in the dashboard, the email address of that user.
example: "user@example.com"
canceled_at:
type: string
format: date-time
description: The RFC 3339 date and time at which the Disbursement was canceled.
example: "2020-01-31T23:00:00Z"
readOnly: true
DisbursementApproval:
type: object
description: |-
If your account requires approvals for disbursements and the disbursement was approved, this will contain the details of the approval.
properties:
approved_by:
type: string
description: If the disbursement was approved by a user in the dashboard, the email address of that user.
example: "user@example.com"
approved_at:
type: string
format: date-time
description: The RFC 3339 date and time at which the Disbursement was approved.
example: "2020-01-31T23:00:00Z"
readOnly: true
DisbursementRejection:
type: object
description: |-
If the disbursement was rejected by Chariot, this will contain details as to why the disbursement was rejected.
properties:
reason:
type: string
description: |-
Why the disbursement was rejected.
Possible values include:
- `insufficient_funds`: The disbursement was rejected because the grantmaker does not have enough funds in their account.
- `incorrect_recipient`: The disbursement was rejected because the recipient or address was incorrect.
- `suspected_fraud`: The disbursement was suspected to be fraudulent.
- `requested_by_user`: The disbursement was rejected at the request of the grantmaker.
- `acceptance_criteria_failed`: The disbursement was rejected because the disbursement did not meet the acceptance criteria for the receiving organization.
- `duplicate`: The disbursement was rejected because the disbursement was a duplicate.
- `unknown`: The disbursement was rejected for an unknown reason.
example: "insufficient_funds"
enum:
- insufficient_funds
- incorrect_recipient
- suspected_fraud
- requested_by_user
- acceptance_criteria_failed
- duplicate
- unknown
rejected_at:
type: string
format: date-time
description: The RFC 3339 date and time at which the Disbursement was rejected.
example: "2020-01-31T23:00:00Z"
readOnly: true
DisbursementVerification:
type: object
description: |-
If the disbursement has been verified by Chariot, this will contain the verification details.
properties:
verified_at:
type: string
format: date-time
description: The RFC 3339 date and time at which the Disbursement was verified.
example: "2020-01-31T23:00:00Z"
readOnly: true
DisbursementStop:
type: object
description: |-
If the disbursement was stopped by the grantmaker after it was submitted, this will contain the details of the stop.
properties:
stopped_by:
type: string
description: If the disbursement was stopped by a user in the dashboard, the email address of that user.
example: "user@example.com"
stopped_at:
type: string
format: date-time
description: The RFC 3339 date and time at which the Disbursement was stopped.
example: "2020-01-31T23:00:00Z"
readOnly: true
ProgramDetails:
type: object
description: Details about the program that the disbursement belongs to.
properties:
id:
type: string
description: The unique identifier for the program
example: "program_01jpjenf5q6cawy43yxfcrxhct"
name:
type: string
description: The name of the program
example: "Annual Grants"
DisbursementTransfer:
type: object
description: |-
After a disbursement is submitted, this object contains additional details about the transfer.
This is useful if you want to track the disbursement over the specific payment rails/networks.
An account transfer is the preferred transfer method when the receiving organization has a Chariot account at the same bank as the grantmaker.
An ACH transfer is used when the receiving organization has a Chariot account at a different bank than the grantmaker.
A check transfer is used when the receiving organization does not have a Chariot account.
properties:
account_transfer:
$ref: "#/components/schemas/AccountTransfer"
ach_transfer:
$ref: "#/components/schemas/AchTransfer"
check_transfer:
$ref: "#/components/schemas/CheckTransfer"
real_time_payments_transfer:
$ref: "#/components/schemas/RealTimePaymentsTransfer"
RealTimePaymentsTransfer:
type: object
description: |-
A real-time payments transfer represents an instant, electronic transfer of funds.
required:
- transfer_id
- amount
- status
- creditor_name
- remittance_information
- created_at
- updated_at
properties:
transfer_id:
type: string
description: The unique identifier for the real-time payments transfer
example: "real_time_payments_transfer_01j8rs605a4gctmbm58d87mvsj"
readOnly: true
amount:
type: integer
format: int64
description: The amount of the real-time payments transfer in minor currency units (cents)
example: 10000
status:
type: string
description: The status of the real-time payments transfer
example: "complete"
enum:
- pending_submission
- submitted
- complete
- rejected
creditor_name:
type: string
description: The name of the creditor for the real-time payments transfer
example: "Acme Inc."
remittance_information:
type: string
description: The remittance information for the real-time payments transfer
example: "Real-Time Payment: Acme Inc."
transaction_identification:
type: string
description: The transaction identification for the real-time payments transfer
example: "20260101101050001T1BTEST01234557890"
submitted_at:
type: string
format: date-time
description: |-
The date and time the real-time payments transfer was submitted to the payment network.
example: "2020-01-31T23:00:00Z"
acknowledged_at:
type: string
format: date-time
description: |-
The date and time at which the real-time payments transfer was acknowledged by the receiving bank.
If the transfer is not acknowledged, this will be null.
example: "2020-01-31T23:00:05Z"
rejected_at:
type: string
format: date-time
description: |-
The date and time at which the real-time payments transfer was rejected.
If the transfer is not rejected, this will be null.
example: "2020-01-31T23:00:05Z"
created_at:
type: string
format: date-time
description: The date and time the real-time payments transfer was created
example: "2020-01-31T23:00:00Z"
readOnly: true
updated_at:
type: string
format: date-time
description: The date and time the real-time payments transfer was last updated
example: "2020-01-31T23:00:00Z"
readOnly: true
AccountTransfer:
type: object
description: |-
An account transfer represents an instant, electronic transfer of funds.
required:
- transfer_id
- amount
- status
- created_at
- updated_at
properties:
transfer_id:
type: string
description: The unique identifier for the account transfer
example: "account_transfer_01j8rs605a4gctmbm58d87mvsj"
readOnly: true
amount:
type: integer
format: int64
description: The amount of the account transfer in minor currency units (cents)
example: 10000
status:
type: string
description: The status of the account transfer
example: "complete"
enum:
- pending_approval
- canceled
- complete
created_at:
type: string
format: date-time
description: The date and time the account transfer was created
example: "2020-01-31T23:00:00Z"
readOnly: true
updated_at:
type: string
format: date-time
description: The date and time the account transfer was last updated
example: "2020-01-31T23:00:00Z"
readOnly: true
AchTransfer:
type: object
description: |-
An ACH transfer represents an electronic transfer of funds via the Automated Clearing House (ACH) payment network.
required:
- transfer_id
- amount
- status
- created_at
properties:
transfer_id:
type: string
description: The unique identifier for the ACH transfer
example: "ach_transfer_01j8rs605a4gctmbm58d87mvsj"
readOnly: true
amount:
type: integer
format: int64
description: |-
The amount of the ACH transfer in minor currency units (cents).
For ACH debits, this is a negative number.
example: 10000
status:
type: string
description: |-
The lifecycle status of the ACH transfer.
Possible values include:
- `initiated`: The ACH transfer has been initiated and is pending submission to the Federal Reserve.
- `submitted`: The ACH transfer has been submitted to the Federal Reserve.
- `completed`: The ACH transfer has been completed. Funds should be settled.
- `rejected`: The ACH transfer was rejected.
- `returned`: The ACH transfer was returned by the receiving organization.
example: "initiated"
enum:
- initiated
- submitted
- completed
- rejected
- returned
direction:
type: string
description: |-
The direction of the ACH transfer.
example: "credit"
enum:
- credit
- debit
standard_entry_class_code:
type: string
description: |-
The Standard Entry Class (SEC) code for the ACH transfer.
example: "corporate_credit_or_debit"
enum:
- corporate_credit_or_debit
- prearranged_payments_and_deposit
- internet_initiated
company_entry_description:
type: string
description: |-
The company entry description for the ACH transfer.
This is included in the transfer data sent to the receiving bank.
example: "Disbursement to nonprofit"
trace_number:
type: string
description: |-
A 15 digit number recorded in the Nacha file and transmitted to the receiving bank.
Along with the amount, date, and originating routing number, this can be used to identify the ACH transfer at the receiving bank.
ACH trace numbers are not unique, but are used to correlate returns.
example: "012345678901234"
effective_date:
type: string
format: date-time
description: |-
The ACH transfer's effective date as sent to the Federal Reserve.
This is the date the funds will be available to the receiving organization.
example: "2020-01-31T23:00:00Z"
submitted_at:
type: string
format: date-time
description: |-
The date and time the ACH transfer was submitted to the Federal Reserve.
example: "2020-01-31T23:00:00Z"
settled_at:
type: string
format: date-time
description: |-
The date and time at which the ACH transfer was settled.
If the transfer is not settled, this will be null.
example: "2020-07-12 15:00:00.000"
rejected_at:
type: string
format: date-time
description: |-
The date and time at which the ACH transfer was rejected.
If the transfer is not rejected, this will be null.
example: "2020-07-12 15:00:00.000"
returned_at:
type: string
format: date-time
description: |-
The date and time at which the ACH transfer was returned.
If the transfer is not returned, this will be null.
example: "2020-07-12 15:00:00.000"
created_at:
type: string
format: date-time
description: The date and time the ACH transfer was created
example: "2020-01-31T23:00:00Z"
readOnly: true
updated_at:
type: string
format: date-time
description: The date and time the ACH transfer was last updated
example: "2020-01-31T23:00:00Z"
readOnly: true
CheckTransfer:
type: object
description: |-
A check transfer represents a paper check that is mailed to the receiving organization.
required:
- transfer_id
- amount
- status
- mailing_address
- memo
- recipient_name
- created_at
properties:
transfer_id:
type: string
description: The unique identifier for the check transfer
example: "check_transfer_01j8rs605a4gctmbm58d87mvsj"
readOnly: true
amount:
type: integer
format: int64
description: The amount of the check transfer in minor currency units (cents)
example: 10000
status:
type: string
description: |-
The lifecycle status of the check.
The set of statuses include:
- `pending`: The check is pending review by Chariot.
- `canceled`: The check has been canceled.
- `issued`: The check has been mailed and is pending delivery.
- `rejected`: The check was rejected by Chariot.
- `deposited`: The check has been deposited by the receiving organization.
- `stopped`: A stop payment was requested on the check.
- `returned`: The check has been returned by the receiving organization.
To see a more detailed description of each status and the overall lifecycle of check disbursements,
see the "Transfer Statuses" section of the Chariot documentation.
example: "issued"
enum:
- pending
- canceled
- issued
- rejected
- deposited
- stopped
- returned
memo:
type: string
description: The memo on the check. Maximum of 72 characters.
example: "Disbursement to nonprofit"
note:
type: string
description: An optional note for the check
example: "Please deposit promptly"
check_number:
type: string
description: The check number
example: "123456789"
recipient_name:
type: string
description: The name that will be printed on the check.
example: "Charity Good"
mailing_address:
$ref: "#/components/schemas/PostalAddress"
bank_of_first_deposit_routing_number:
type: string
description: The routing number for the bank of first deposit
example: "021000089"
postal_tracking_updates:
type: array
description: The list of tracking updates for the check
items:
$ref: "#/components/schemas/PostalTrackingUpdate"
submitted_at:
type: string
format: date-time
description: The date and time the check was submitted to the carrier.
example: "2020-01-31T23:00:00Z"
canceled_at:
type: string
format: date-time
description: The date and time the check was canceled.
example: "2020-01-31T23:00:00Z"
stopped_at:
type: string
format: date-time
description: The date and time the check was stopped.
example: "2020-01-31T23:00:00Z"
deposited_at:
type: string
format: date-time
description: The date and time the check was deposited.
example: "2020-01-31T23:00:00Z"
created_at:
type: string
format: date-time
description: The date and time the check transfer was created
example: "2020-01-31T23:00:00Z"
updated_at:
type: string
format: date-time
description: The date and time the check transfer was last updated
example: "2020-01-31T23:00:00Z"
PostalTrackingUpdate:
type: object
description: The postal tracking update for the check
required:
- id
- event_type
- created_at
properties:
id:
type: integer
format: int64
description: The unique identifier for the tracking update
example: 1
readOnly: true
event_type:
type: string
description: |-
The event type of the tracking update.
The set of event types include:
- `in_transit`: The check has been processed by the origin facility.
- `processed_for_delivery`: The check has been greenlit for delivery at the recipient's nearest postal facility. The check should reach the mailbox within 1-2 business days of this tracking update.
- `delivered`: The check has been delivered to the recipient's address.
- `returned_to_sender`: The check has been returned to the sender due to barcode, ID tag area, or address errors.
example: "in_transit"
enum:
- in_transit
- processed_for_delivery
- delivered
- returned_to_sender
created_at:
type: string
format: date-time
description: The date and time the tracking update was created
example: "2020-01-31T23:00:00Z"
StopDisbursementPaymentReason:
type: string
description: |-
The reason for stopping a disbursement payment.
Possible values include:
- `mail_delivery_failure`: The check could not be delivered.
- `not_authorized`: The check was not authorized.
- `voided`: The check was stopped and voided.
- `unknown`: The reason for stopping the disbursement payment is unknown.
example: "mail_delivery_failure"
enum:
- mail_delivery_failure
- not_authorized
- voided
- unknown
OutboundTransfer:
type: object
description: |-
An outbound transfer represents a transfer of funds from a financial account to an external bank account.
required:
- id
- amount
- currency
- status
- financial_account_id
- description
- created_at
properties:
id:
type: string
description: The unique identifier for the outbound transfer
example: "outbound_transfer_01j8rs605a4gctmbm58d87mvsj"
readOnly: true
amount:
type: integer
format: int64
description: The amount of the outbound transfer in minor currency units. For example, for dollars, this is cents.
example: 10000
currency:
type: string
description: The [ISO 4217 code](https://en.wikipedia.org/wiki/ISO_4217) for the transfer's currency.
example: USD
financial_account_id:
type: string
description: The unique identifier for the financial account that the transfer was made from.
example: "fa_01j8rs605a4gctmbm58d87mvsj"
description:
type: string
description: An arbitrary string attached to the object. Often useful for displaying to users.
example: "Transfer to external bank account"
status:
type: string
description: |-
The status of the outbound transfer.
An Outbound Transfer is `processing` if it is created but the payment is not yet submitted. For example, if the transfer is awaiting submission to the FedACH.
The status changes to `failed` if the transfer is rejected by Chariot.
The status changes to `submitted` once the payment is successfully submitted to the the payment network (e.g. FedACH).
The status changes to `returned` if the funds fail to arrive at the external bank account.
example: "processing"
readOnly: true
enum:
- processing
- submitted
- failed
- returned
created_at:
type: string
format: date-time
description: The date and time the inbound transfer was created
example: "2020-01-31T23:00:00Z"
readOnly: true
updated_at:
type: string
format: date-time
description: The date and time the inbound transfer was last updated
example: "2020-01-31T23:00:00Z"
readOnly: true
CreateDisbursementInput:
type: object
description: |-
The request to create a disbursement and its corresponding transactions.
The organization and amount are required.
The transactions array should contain the list of transactions associated with the disbursement. The amounts
in the transactions should sum up to the disbursement amount.
required:
- organization_id
- amount
- transactions
properties:
organization_id:
type: string
description: The ID of the organization that will receive the disbursement.
example: "org_1234567890"
program_id:
type: string
description: |-
The identifier for the program that the disbursement is associated with.
The program must have grant_disbursement_status enabled.
If not provided, your grant_disbursement_status enabled program will be used.
If your Chariot account has multiple grant_disbursement_status enabled programs, you must specify the program_id to use for the disbursement.
example: "program_01jpjenf5q6cawy43yxfcrxhct"
nullable: true
amount:
type: integer
format: int64
description: The disbursement amount in USD cents. Must be a positive amount.
example: 10000
auto_fund:
type: boolean
description: |-
Enable just-in-time (JIT) funding for this disbursement. When true, Chariot will automatically create an inbound transfer for the disbursement amount when it is approved, eliminating the need to pre-fund your account. This feature must be enabled on your account. Contact Chariot to enable JIT disbursements.
example: false
default: false
bypass_chariot_organization_verification:
type: boolean
description: |-
By default (`false`), the disbursement will remain in the `awaiting_verification` status until
Chariot's compliance team has verified the nonprofit.
If set to `true`, the disbursement will proceed through its normal lifecycle without waiting for
Chariot to verify the organization. Only set this if you have independently verified the organization
and do not want to wait for or rely on Chariot's verification.
This field is only relevant when disbursing to an organization that was created via a [verification request](/api/verification-requests/create).
default: false
transactions:
type: array
description: |-
The list of transactions associated with the disbursement.
Each transaction is an individual donation to be included in the disbursement.
Must specify at least one transaction.
The sum of all transaction net amounts (amount - fee_amount) must equal the disbursement amount.
items:
type: object
description: |
An individual donation to be included in the disbursement.
required:
- amount
- type
properties:
amount:
type: integer
format: int64
description: |
The gross transaction amount in minor currency units (cents) before any fees are deducted.
This represents the total amount of the donation.
example: 10000
internal_transaction_id:
type: string
description: "A unique identifier for the transaction within the grantmaker's internal system. Maximum length: 255 characters."
maxLength: 255
example: "GRANT-001"
fee_amount:
type: integer
format: int64
description: |
Optional fee amount in minor currency units (cents) to be deducted from the transaction.
If provided, the fee amount must be less than the transaction amount.
The net amount (amount - fee_amount) will be used when calculating the disbursement total.
example: 500
nullable: true
type:
$ref: "#/components/schemas/DonationType"
purpose:
type: string
description: "The purpose of the grant. Maximum length: 600 characters."
maxLength: 600
example: "General operating support"
note:
type: string
description: "A note to the recipient. Maximum length: 600 characters."
maxLength: 600
example: "Allocate to education"
recipient_name:
type: string
description: "The intended recipient of the grant (for example, a fiscal sponsor's project). Maximum length: 255 characters."
maxLength: 255
example: "Clean Water Project"
donors:
$ref: "#/components/schemas/TransactionDonors"
daf_grant:
$ref: "#/components/schemas/TransactionDafGrant"
corporate_match:
$ref: "#/components/schemas/TransactionCorporateMatch"
metadata:
type: object
description: Additional metadata for the transaction
additionalProperties:
type: string
InboundTransfer:
type: object
description: |-
An inbound transfer represents a transfer of funds from an external bank account to a financial account.
required:
- id
- amount
- created_at
properties:
id:
type: string
description: The unique identifier for the inbound transfer
example: "inbound_transfer_01j8rs605a4gctmbm58d87mvsj"
readOnly: true
amount:
type: integer
format: int64
description: |-
The amount of the inbound transfer in minor currency units (cents).
This amount must be positive.
example: 10000
description:
type: string
description: |-
An arbitrary string attached to the object. Often useful for displaying to users.
example: "InboundTransfer from my bank account"
status:
type: string
description: |-
The status of the inbound transfer.
An Inbound Transfer is `pending` if it created and the funds haven't been received yet.
The status changes to `completed` when the funds have been received and the balance of the financial account has been updated.
The status changes to `canceled` if the transfer is canceled.
The status changes to `failed` if the transfer fails.
example: "pending"
enum:
- pending
- completed
- canceled
- failed
created_at:
type: string
format: date-time
description: The date and time the inbound transfer was created
example: "2020-01-31T23:00:00Z"
readOnly: true
updated_at:
type: string
format: date-time
description: The date and time the inbound transfer was last updated
example: "2020-01-31T23:00:00Z"
readOnly: true
Transaction:
type: object
description: |
A transaction represents an individual line-item or donation for a recipient nonprofit organization.
The transaction amount represents the gross amount, and an optional fee can be deducted to calculate the net amount that will be disbursed.
required:
- amount
- net_amount
- type
properties:
id:
type: string
description: The unique identifier for the transaction
example: "txn_1LaXpKGUcADgqoEMl0Cx0Ygg"
readOnly: true
amount:
type: integer
format: int64
description: |
The gross transaction amount in minor currency units (cents) before any fees are deducted.
This represents the total amount of the donation.
example: 10000
internal_transaction_id:
type: string
description: "A unique identifier for the transaction within the grantmaker's internal system."
nullable: true
example: "GRANT-001"
fee_amount:
type: integer
format: int64
description: |
The fee amount in minor currency units (cents) to be deducted from the transaction amount.
This is an optional field. If not provided, no fee will be deducted.
The fee amount must be less than the transaction amount.
example: 500
nullable: true
net_amount:
type: integer
format: int64
description: |
The net transaction amount in minor currency units (cents) after fees are deducted.
This is calculated as: net_amount = amount - fee_amount.
This is the actual amount that will be disbursed to the nonprofit.
example: 9500
readOnly: true
type:
$ref: "#/components/schemas/DonationType"
purpose:
type: string
description: "The purpose of the grant."
nullable: true
example: "General operating support"
note:
type: string
description: "A note to the recipient."
nullable: true
example: "Allocate to education"
recipient_name:
type: string
description: "The intended recipient of the grant (for example, a fiscal sponsor's project)."
nullable: true
example: "Clean Water Project"
donors:
$ref: "#/components/schemas/TransactionDonors"
daf_grant:
$ref: "#/components/schemas/TransactionDafGrant"
corporate_match:
$ref: "#/components/schemas/TransactionCorporateMatch"
created_at:
type: string
format: date-time
description: The date and time the transaction was created
example: "2020-01-31T23:00:00Z"
readOnly: true
updated_at:
type: string
format: date-time
description: The date and time the transaction was last updated
example: "2020-01-31T23:00:00Z"
readOnly: true
metadata:
type: object
description: Additional metadata for the transaction
additionalProperties:
type: string
DonationType:
type: string
description: The type of donation
enum:
- donor_advised_fund_grant
- corporate_match
Donor:
type: object
description: The donor information for the transaction
properties:
full_name:
type: string
description: "The full name of the donor. Maximum length: 255 characters."
example: "John Doe"
first_name:
type: string
description: "The first name of the donor. Maximum length: 255 characters."
example: "John"
last_name:
type: string
description: "The last name of the donor. Maximum length: 255 characters."
example: "Doe"
email:
type: string
description: "The email address of the donor. Maximum length: 255 characters."
example: "bob@me.com"
phone:
type: string
description: "The phone number of the donor. Maximum length: 20 characters."
example: "415-555-1212"
address:
$ref: "#/components/schemas/Address"
TransactionDonors:
type: object
description: Information about the individuals associated with the gift. Includes a primary donor and an optional joint donor.
properties:
primary_donor:
$ref: "#/components/schemas/Donor"
joint_donor:
$ref: "#/components/schemas/Donor"
TransactionDafGrant:
type: object
description: A simplified DAF grant object containing the fund name.
nullable: true
properties:
fund_name:
type: string
description: "The name of the DAF fund that made the grant. Maximum length: 255 characters."
maxLength: 255
example: "Smith Family Fund"
TransactionCorporateMatch:
type: object
description: A corporate matching gift. Required when the transaction type is corporate_match.
nullable: true
required:
- company_name
properties:
company_name:
type: string
description: "The name of the company making the matching gift. Maximum length: 255 characters."
maxLength: 255
example: "Acme Corporation"
EventCategory:
type: string
description: |
The category of the event. This is useful for filtering events.
Event names follow the pattern `{resource}.{event_type}` where `event_type` is either `created` or `updated`. Status transitions (for example, a Donor Account moving to `approved` or `rejected`) are emitted as `{resource}.updated` events — fetch the object to read its current status.
enum:
- "grant.created"
- "grant.updated"
- "unintegrated_grant.created"
- "unintegrated_grant.updated"
- "donor_account.created"
- "donor_account.updated"
- "authorization_token.created"
- "authorization_token.updated"
- "grant_request.created"
- "grant_request.updated"
- "disbursement.created"
- "disbursement.updated"
- "inbound_transfer.created"
- "inbound_transfer.updated"
- "donation.created"
- "donation.updated"
- "deposit.created"
- "deposit.updated"
- "verification_request.created"
- "verification_request.updated"
Event:
type: object
description: |
Events are records of things that happened to objects at Chariot.
properties:
id:
type: string
description: The unique identifier for the event
example: "203c4e56-5c39-4a66-abcd-2ec8af99a1b9"
readOnly: true
category:
$ref: "#/components/schemas/EventCategory"
created_at:
type: string
format: date-time
description: The date and time the event was created
example: "2024-01-19T18:48:56.37Z"
readOnly: true
associated_object_id:
type: string
description: The unique identifier for the associated object
example: "4d06d393-1f14-46cf-b02d-8db17d7ed06a"
readOnly: true
associated_object_type:
type: string
description: The type of the associated object
example: "grant"
readOnly: true
EventSubscriptionStatus:
type: string
description: |-
The status of the event subscription.
This indicates if we'll send notifications to this subscription
* active: subscription is active and events will be delivered normally
* disabled: subscription is temporarily disabled and events will not be delivered
* deleted: subscription has been deleted and events will not be delivered
* requires_attention: subscription has been disabled due to delivery failures and events will not be delivered
enum:
- "active"
- "disabled"
- "deleted"
- "requires_attention"
EventSubscription:
type: object
description: |
Webhooks are event notifications we send to you by HTTPS POST requests.
Event Subscriptions are how you configure your application to listen for them.
required:
- url
properties:
id:
type: string
description: The unique identifier for the event subscription
example: "4d06d393-1f14-46cf-b02d-8db17d7ed06a"
readOnly: true
created_at:
type: string
format: date-time
description: The date and time the event subscription was created
example: "2024-01-14T12:48:56.37Z"
readOnly: true
status:
$ref: "#/components/schemas/EventSubscriptionStatus"
url:
type: string
description: The webhook url where we'll send notifications.
example: "https://example.com/webhook"
category:
$ref: "#/components/schemas/EventCategory"
Program:
type: object
description: |-
Programs encapsulate functional operations and allow for segregation of funds & activity on top of a Financial Account.
By default, most organizations will have a Gift Processing program for managing inbound donation revenue.
If you are disbursing funds to other nonprofits, we will work together to create a Grantmaking program for you.
If there are other use cases where you need to segregate funds or activity, we will work together to create additional Programs for you.
required:
- id
- name
- grant_disbursement_status
- gift_processing_status
- created_at
- updated_at
properties:
id:
type: string
description: The unique identifier for the program
example: "program_01j8rs605a4gctmbm58d87mvsj"
name:
type: string
description: The name of the program
example: "Gift Processing"
description:
type: string
description: A description of the program
example: "This program is used to unify and standardize donation processing across all Donor-Advised Fund grants."
grant_disbursement_status:
type: string
enum:
- "enabled"
- "disabled"
description: |-
The status of the program's ability to disburse grant payments to other eligible nonprofit recipients.
example: "enabled"
readOnly: true
gift_processing_status:
type: string
enum:
- "enabled"
- "disabled"
description: |-
The status of the program's ability to connect payment sources to process donations and grants to your organization.
example: "enabled"
readOnly: true
created_at:
type: string
format: date-time
description: The date and time the program was created
example: "2020-01-31T23:00:00Z"
updated_at:
type: string
format: date-time
description: The date and time the program was last updated
example: "2020-01-31T23:00:00Z"
Paging:
type: object
description: The paging information
properties:
next_page_token:
type: string
description: The token to use for pagination. If not set, the first page of results will be returned.
example: "eyJpZCI6IjEyMzQ1Njc4OTAiLCJ0aW1lc3RhbXAiOiIyMDIwLTA3LTEwIDE1OjAwOjAwLjAwMCJ9"
total:
type: integer
ProblemDetails:
type: object
description: >-
RFC 7807 problem-details error (media type application/problem+json).
The `status` field is an integer HTTP status code.
required:
- type
- title
- status
- detail
properties:
type:
type: string
description: A URI reference identifying the problem type.
example: about:blank
title:
type: string
description: A short, human-readable summary of the problem type.
example: API Error
status:
type: integer
description: The HTTP status code for this error.
example: 400
detail:
type: string
description: A human-readable explanation specific to this occurrence.
example: The request is invalid or contains invalid parameters.
example:
type: about:blank
title: "API Error"
status: 400
detail: The request is invalid or contains invalid parameters.
headers:
X-Request-Id:
description: The unique identifier for the request
schema:
type: string
Location:
description: The URI of the created object
schema:
type: string
Idempotency-Key:
description: Idempotency key for the request
schema:
type: string
requestBodies:
CreateFileLinkRequest:
description: The request body for the File Links.create endpoint
required: true
content:
application/json:
schema:
type: object
required:
- file_id
properties:
file_id:
type: string
description: The unique identifier for the file to create a link for.
example: "file_01j8rs605a4gctmbm58d87mvsj"
CreateNonprofitAddressSuggestionRequest:
description: Address entries to upload, each matched to a nonprofit by EIN.
required: true
content:
application/json:
schema:
type: object
required:
- entries
properties:
entries:
type: array
description: Address entries to upload. Up to 500 per request.
minItems: 1
maxItems: 500
items:
$ref: "#/components/schemas/NonprofitAddressSuggestionEntry"
example:
entries:
- ein: "13-1635294"
line1: "431 18th Street NW"
city: "Washington"
state: "DC"
zip: "20006"
- ein: "530196605"
line1: "1250 24th Street NW"
line2: "Suite 300"
city: "Washington"
state: "DC"
zip: "20037-1175"
CreateNonprofitContactSuggestionRequest:
description: Contact entries to upload, each matched to a nonprofit by EIN.
required: true
content:
application/json:
schema:
type: object
required:
- entries
properties:
entries:
type: array
description: Contact entries to upload. Up to 500 per request.
minItems: 1
maxItems: 500
items:
$ref: "#/components/schemas/NonprofitContactSuggestionEntry"
example:
entries:
- ein: "13-1635294"
email: "claims@redcross.org"
phone: "2025551212"
first_name: "Sarah"
last_name: "Johnson"
- ein: "530196605"
email: "ap@worldwildlife.org"
UpdateDonationRequest:
description: |-
The request to update core donation attributes like purpose, note and attribution.
required: true
content:
application/json:
schema:
type: object
properties:
reason:
type: string
description: |-
A user-friendly reason or comment about the update.
This is useful to understand why the donation was updated.
example: "Donor requested a change to the donation purpose"
purpose:
type: string
description: |-
A description of the donor's intent for the donation.
This is useful to understand how the donor intended the donation to be used.
note:
type: string
description: |-
An informational note from the donor to the nonprofit about the donation.
This may contain a message or other useful information that the donor wants to share with the nonprofit.
attribution:
allOf:
- $ref: "#/components/schemas/DonationAttribution"
donor_advised_fund_grant:
allOf:
- $ref: "#/components/schemas/DafGrant"
corporate_match:
allOf:
- $ref: "#/components/schemas/CorporateMatch"
example:
reason: "Donor requested a change to the donation"
purpose: "Capital Campaign"
note: "Please dedicate in memory of grandma"
attribution:
primary_donor:
email: "warrenBuffet@example.com"
donor_advised_fund_grant:
organization_name: "Fidelity Charitable"
fund_name: "Warren Buffet Fund"
AssignPropertyRequest:
description: |-
The request to add a property value to a donation or deposit resource.
required: true
content:
application/json:
schema:
type: object
required:
- value
- resources
properties:
value:
$ref: "#/components/schemas/PropertyValue"
resources:
type: object
required:
- ids
properties:
ids:
type: array
items:
type: string
description: The unique identifier for the resource
example: "donation_01j8rs605a4gctmbm58d87mvsj"
GrantCaptureRequest:
description: |-
The request to create and submit a grant. This is useful to capture a grant intent associated with DAFpay workflow session.
The request should specify the grant amount. This is the amount submitted for processing by the DAF.
required: true
content:
application/json:
schema:
type: object
required:
- workflowSessionId
- amount
properties:
workflowSessionId:
type: string
description: |-
The identifier of the donor's DAFpay Workflow Session.
See [Capturing Grant Intents](/guides/dafpay/integrating-dafpay/integration#capturing-grant-intents) for how to get this value from the DAFpay `CHARIOT_SUCCESS` event.
amount:
type: number
example: 15000
description: |-
The grant amount in cents that will be processed by Chariot and submitted to the DAF.
This amount must be in whole dollar increments (rounded to the nearest hundred) as currently
all DAFs only accept whole dollar grant amounts.
applicationFeeAmount:
type: number
example: 3000
description: |-
This parameter specifies the fee your platform plans to take from the grant in cents.
This is a fee in addition to Chariot's processing fee. With application fees,
Chariot collects the fee you determine from the nonprofit and passes it to your platform.
Please note that platform fees are only taken when the grant is successfully received by the nonprofit.
The sum of Chariot's fee and the applicationFeeAmount cannot exceed 5% of the grant's amount.
If the fee limit is exceeded, a `400 Bad Request` error will be returned.
donor:
type: object
properties:
firstName:
type: string
description: "The first name of the donor. Maximum length: 255 characters."
lastName:
type: string
description: "The last name of the donor. Maximum length: 255 characters."
email:
type: string
description: "The email address of the donor. Maximum length: 255 characters."
phone:
type: string
description: "The phone number of the donor. Maximum length: 255 characters."
address:
$ref: "#/components/schemas/GrantAddress"
note:
type: string
description: |-
A note the donor wants to send to the nonprofit. Maximum length: 400 characters.
designation:
type: string
description: |-
The designation to include on the grant. If this is left blank, "Where needed most" will be used.
Note that including a custom designation may cause the grant approval process to take longer.
Maximum length: 100 characters.
RecurringGrantCaptureRequest:
description: |-
The request to create and submit a monthly recurring grant. This is useful to capture a recurring grant intent associated with Connect workflow session.
The request should specify the grant amount. The grant will re-occur according to the scheduled frequency or recurrence of the request.
The recurring grant will continue indefinitely until the donor runs out of funds or until the donor cancels the recurring grant with their DAF provider.
Some DAF providers require an end-date or number of payments in order to create a recurring grant.
In most cases, the recurring grant will continue indefinitely until the donor's account runs out of funds or until the donor cancels the recurring grant with their DAF provider.
Some DAF providers require an explicit bound to the time period or the number of payments in which case currently we opt for the longest recurring donation timeline possible.
For example, if the DAF provider allows recurring donations to continue for up to 10 years we will submit the request as such.
This is the amount submitted for processing by the DAF.
required: true
content:
application/json:
schema:
type: object
required:
- workflowSessionId
- amount
- frequency
properties:
workflowSessionId:
type: string
description: |-
The identifier of the donor's DAFpay Workflow Session.
See [Capturing Grant Intents](/guides/dafpay/integrating-dafpay/integration#capturing-grant-intents) for how to get this value from the DAFpay `CHARIOT_SUCCESS` event.
frequency:
type: string
description: |-
The recurrence interval schedule for the recurring grant. Currently, only `MONTHLY` is supported.
enum:
- MONTHLY
example: MONTHLY
amount:
type: number
example: 15000
description: |-
The final grant amount in cents that will be processed by Chariot and submitted to the DAF for recurring gifts.
This amount must be in whole dollar increments (rounded to the nearest hundred) as currently
all DAFs only accept whole dollar grants.
applicationFeeAmount:
type: number
example: 3000
description: |-
This parameter specifies the fee your platform plans to take from the first grant in cents.
This is a fee in addition to Chariot's processing fee. With application fees,
Chariot collects the fee you determine from the nonprofit and passes it to your platform.
Please note that platform fees are only taken when the grant is successfully received by the nonprofit.
The sum of Chariot's fee and the applicationFeeAmount cannot exceed 5% of the grant's amount.
If the 5% limit is exceeded, a 400 error will be returned.
donor:
type: object
properties:
firstName:
type: string
description: "The first name of the donor. Maximum length: 255 characters."
lastName:
type: string
description: "The last name of the donor. Maximum length: 255 characters."
email:
type: string
description: "The email address of the donor. Maximum length: 255 characters."
phone:
type: string
description: "The phone number of the donor. Maximum length: 255 characters."
address:
$ref: "#/components/schemas/GrantAddress"
note:
type: string
description: |-
A note the donor wants to send to the nonprofit. Maximum length: 400 characters.
designation:
type: string
description: |-
The designation to include on the grant. If this is left blank, "Where needed most" will be used.
Note that including a custom designation may cause the grant approval process to take longer.
Designations over 100 characters will be truncated.
CreateConnectRequest:
description: |-
The request to create a new Connect object for a nonprofit.
required: true
content:
application/json:
schema:
type: object
required:
- organization_id
- contact
properties:
organization_id:
type: string
description: The unique identifier for the organization
example: "org_1234567890"
contact:
type: object
required:
- email
properties:
email:
type: string
description: The email address for the nonprofit account contact
example: ben.give@co.com
phone:
type: string
description: The phone number for the nonprofit account contact
example: "9127772424"
first_name:
type: string
description: The first name of the nonprofit account contact that manages this Connect
example: Ben
last_name:
type: string
description: The last name of the nonprofit account contact that manages this Connect
example: Give
name:
type: string
description: |-
A human readable name of the Connect, optional.
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object.
additionalProperties:
type: string
CreateDisbursementRequest:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateDisbursementInput"
examples:
MultipleTransactions:
summary: Disbursement with multiple DAF grant transactions
value:
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
amount: 25000
transactions:
[
{
amount: 15000,
internal_transaction_id: "GRANT-001",
type: "donor_advised_fund_grant",
purpose: "General Operating Support",
note: "Allocate to education programs",
donors:
{
primary_donor:
{
first_name: "Jane",
last_name: "Doe",
email: "jane.doe@example.com",
},
},
daf_grant: { fund_name: "Doe Family Charitable Fund" },
},
{
amount: 10000,
internal_transaction_id: "MATCH-001",
type: "corporate_match",
purpose: "Corporate matching gift",
note: "Matched employee donation",
donors:
{
primary_donor:
{
first_name: "John",
last_name: "Smith",
email: "john.smith@example.com",
},
},
corporate_match: { company_name: "Acme Corporation" },
},
]
MultipleTransactionsWithFees:
summary: Disbursement with multiple transactions including fees
value:
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
amount: 24000
transactions:
[
{
amount: 15000,
fee_amount: 500,
internal_transaction_id: "GRANT-001",
type: "donor_advised_fund_grant",
purpose: "General Operating Support",
note: "Allocate to education programs",
donors:
{
primary_donor:
{
first_name: "Jane",
last_name: "Doe",
email: "jane.doe@example.com",
},
},
daf_grant: { fund_name: "Doe Family Charitable Fund" },
},
{
amount: 10000,
fee_amount: 500,
internal_transaction_id: "GRANT-002",
type: "donor_advised_fund_grant",
purpose: "Program Support",
donors:
{
primary_donor:
{
first_name: "John",
last_name: "Smith",
email: "john.smith@example.com",
},
},
daf_grant: { fund_name: "Smith Family Legacy Fund" },
},
]
CorporateMatchTransaction:
summary: Disbursement with a corporate match transaction
value:
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
amount: 10000
transactions:
[
{
amount: 10000,
internal_transaction_id: "MATCH-001",
type: "corporate_match",
purpose: "Corporate matching gift",
note: "Matched employee donation",
donors:
{
primary_donor:
{ first_name: "Alice", last_name: "Williams" },
},
corporate_match: { company_name: "Acme Corporation" },
},
]
BulkCreateDisbursementsRequest:
required: true
content:
application/json:
schema:
type: object
required:
- disbursements
properties:
disbursements:
type: array
description: Array of disbursements to create
minItems: 1
items:
$ref: "#/components/schemas/CreateDisbursementInput"
example:
disbursements:
- organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
amount: 25000
transactions:
- amount: 15000
internal_transaction_id: "GRANT-001"
type: "donor_advised_fund_grant"
purpose: "General Operating Support"
note: "Allocate to education programs"
donors:
primary_donor:
first_name: "Jane"
last_name: "Doe"
email: "jane.doe@example.com"
daf_grant:
fund_name: "Doe Family Charitable Fund"
- amount: 10000
internal_transaction_id: "MATCH-001"
type: "corporate_match"
purpose: "Corporate matching gift"
note: "Matched employee donation"
donors:
primary_donor:
first_name: "John"
last_name: "Smith"
email: "john.smith@example.com"
corporate_match:
company_name: "Acme Corporation"
- organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
amount: 20000
transactions:
- amount: 12000
internal_transaction_id: "GRANT-002"
type: "donor_advised_fund_grant"
purpose: "Youth Programs"
note: "Annual grant for youth services"
donors:
primary_donor:
first_name: "Alice"
last_name: "Williams"
email: "alice.williams@example.com"
daf_grant:
fund_name: "Williams Family Foundation"
- amount: 8000
internal_transaction_id: "MATCH-002"
type: "corporate_match"
purpose: "Corporate matching gift"
note: "Matched employee donation"
donors:
primary_donor:
first_name: "Bob"
last_name: "Chen"
email: "bob.chen@example.com"
corporate_match:
company_name: "TechCorp Inc."
CreateVerificationRequestRequest:
description: |-
The request to create a verification request for an unlisted organization.
required: true
content:
application/json:
schema:
type: object
required:
- ein
- organization_name
- recommended_mailing_address
properties:
ein:
type: string
description: The EIN of the organization to verify
example: "123456789"
organization_name:
type: string
description: The name of the organization as known to the grantmaker
example: "Local Community Foundation"
website:
type: string
description: The organization's website URL
example: "https://localfoundation.org"
recommended_mailing_address:
$ref: "#/components/schemas/VerificationRequestAddress"
contact_email:
type: string
description: Contact email for the nonprofit organization.
example: "contact@localfoundation.org"
CreateInboundTransferRequest:
description: The request body for originating an inbound transfer from an external bank account
required: true
content:
application/json:
schema:
type: object
required:
- amount
- account_id
properties:
amount:
type: number
description: |-
The amount of the transfer in cents.
This amount must be positive.
example: 10000
account_id:
type: string
description: |-
The identifier of the financial account that will receive the transfer.
example: "account_01jpjenf5q6cawy43yxfcrxhct"
description:
type: string
description: An arbitrary string attached to the object. Often useful for displaying to users.
example: "Inbound ACH Transfer from my bank account"
StopDisbursementRequest:
description: The request body for stopping a disbursement payment
required: true
content:
application/json:
schema:
type: object
required:
- reason
properties:
reason:
$ref: "#/components/schemas/StopDisbursementPaymentReason"
CreateEventSubscriptionRequest:
description: The request body for creating an event subscription
required: true
content:
application/json:
schema:
type: object
required:
- url
- category
properties:
url:
type: string
description: The webhook url where we'll send notifications.
example: "https://example.com/webhook"
category:
$ref: "#/components/schemas/EventCategory"
signing_secret:
type: string
description: |-
The key that will be used to sign webhooks.
If no value is passed, a random string will be used as default.
This is necessary to verify that the webhook is coming from Chariot.
While this parameter is optional, it is highly recommended to pass a value
for the secret and implement webhook signature verification.
UpdateEventSubscriptionRequest:
description: The request body for creating an event subscription
required: true
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: |-
The status of the event subscription:
* active: The event subscription is active and events will be delivered
* disabled: The event subscription is temporarily disabled and events will not be delivered
* deleted: The event subscription is permanently deleted and events will not be delivered
enum:
- "active"
- "disabled"
- "deleted"
CreateOutboundTransferRequest:
description: The request body for creating an outbound transfer
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/OutboundTransfer"
CreateDonorAccountRequest:
description: |-
The request to create a new Donor Account.
Used by DAFs to pre-establish access for a donor before that donor authenticates through DAFpay.
required: true
content:
application/json:
schema:
type: object
required:
- donor
properties:
donor:
type: object
description: |-
The donor's identity and profile information. `email` is required and **must** match the email the donor will use when authenticating with DAFpay — DAFpay matches incoming verified emails to existing Accounts. Other fields are optional and may be filled in later by the donor during DAFpay profile setup.
required:
- email
properties:
email:
type: string
description: |-
The donor's email. Must match the email the donor will use when authenticating with DAFpay.
example: "warrenBuffet@example.com"
first_name:
type: string
description: The donor's first name.
example: "Warren"
last_name:
type: string
description: The donor's last name.
example: "Buffet"
phone:
type: string
description: The donor's phone number.
example: "+12125550100"
external_id:
type: string
description: |-
The DAF's internal identifier for this Donor Account. Optional but strongly recommended — it allows you to reconcile DAFpay grants with the donor's record in your own system without an additional update later. Maximum length: 255 characters.
example: "ACME-DAF-DONOR-1042"
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object.
additionalProperties:
type: string
UpdateDonorAccountRequest:
description: |-
The request to update mutable properties on a Donor Account.
Note that the Donor Account's status is managed automatically through the Authorization Token verification flow and cannot be changed directly via this endpoint.
required: true
content:
application/json:
schema:
type: object
properties:
donor:
type: object
description: |-
Mutable donor identity fields. Only the fields you pass are updated; omitted fields are left unchanged.
properties:
first_name:
type: string
description: The donor's first name.
example: "Warren"
last_name:
type: string
description: The donor's last name.
example: "Buffet"
phone:
type: string
description: The donor's phone number.
example: "+12125550100"
external_id:
type: string
description: |-
The DAF's internal identifier for this Donor Account. Maximum length: 255 characters.
example: "ACME-DAF-DONOR-1042"
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object.
additionalProperties:
type: string
CreateDonorAuthorizationTokenRequest:
description: |-
The request to create a new Authorization Token bound to a Donor Account.
All fields are optional — an empty body produces a token with default settings.
required: false
content:
application/json:
schema:
type: object
properties:
expires_in:
type: integer
description: |-
The number of seconds the token is valid for. Defaults to 30 days. Must be between 60 (1 minute) and 7,776,000 (90 days).
example: 2592000
metadata:
type: object
description: A map of arbitrary string keys and values to store information about the object.
additionalProperties:
type: string
VerifyDonorAuthorizationTokenRequest:
description: |-
The request to verify an Authorization Token by its `code` value.
required: true
content:
application/json:
schema:
type: object
required:
- code
properties:
code:
type: string
description: |-
The token's secret code value as provided by the donor. Verification is case-insensitive and tolerant of whitespace and dashes.
example: "DAFP-7K3X-9M4Q"
external_id:
type: string
description: |-
The DAF's internal identifier for this Donor Account. If provided, will be set on the Donor Account as part of the verification. Maximum length: 255 characters.
example: "ACME-DAF-DONOR-1042"
SubmitGrantRequest:
description: |-
The request to submit a Grant Request.
All fields are optional — an empty body is valid.
required: false
content:
application/json:
schema:
type: object
properties:
external_grant_id:
type: string
description: |-
The DAF's internal identifier for this grant. Setting this at submission time provides a useful audit trail and reconciliation key. Maximum length: 255 characters.
example: "ACME-GRANT-2026-00481"
comment:
type: string
description: |-
An optional comment recorded with the submission. Maximum length: 400 characters.
RejectGrantRequest:
description: |-
The request to reject a Grant Request.
required: false
content:
application/json:
schema:
type: object
properties:
reason:
type: string
description: |-
A human-readable reason for the rejection. Maximum length: 400 characters.
example: "Grant amount exceeds donor's available balance."
responses:
UpdateDonationResponse:
description: The response for Donations.update.
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
$ref: "#/components/schemas/Donation"
ListFinancialAccountsResponse:
description: The response for FinancialAccounts.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/FinancialAccount"
ListDafsResponse:
description: The response for Dafs.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/Daf"
nextPageToken:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call to the same endpoint with the same parameters (only substituting the pageToken with this value). If specified, then more results exist on the server that were not returned, otherwise no more results exist on the server.
example:
results:
- id: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
orgName: "National Philanthropic Trust"
address: "123 Main St."
address2: "Apt 100"
city: "New York"
state: "NY"
zip: "12345"
supported: true
minimumGrantAmount: 5000
institutionDown: false
nextPageToken: "c3f685f2-2dda-4956-815b-39867a5e5638"
ListDonorAccountsResponse:
description: The response for DonorAccounts.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/DonorAccount"
next_page_token:
type: string
nullable: true
description: |-
A cursor token to use to retrieve the next page of results by making another API call to the same endpoint with the same parameters (only changing the page_token). If specified, then more results exist on the server that were not returned, otherwise no more results exist on the server.
example:
results:
- id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status: "approved"
donor:
email: "warrenBuffet@example.com"
first_name: "Warren"
last_name: "Buffet"
phone: "+12125550100"
external_id: "ACME-DAF-DONOR-1042"
approval:
approved_at: "2026-04-02T18:30:00Z"
approved_by: "daf:fid_01jpjenf5q6cawy43yxfcrxhct"
rejection: null
disabled: false
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-02T18:30:00Z"
next_page_token: "c3f685f2-2dda-4956-815b-39867a5e5638"
ListDonorAuthorizationTokensResponse:
description: The response for DonorAccounts.listAuthorizationTokens
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/DonorAuthorizationToken"
next_page_token:
type: string
nullable: true
description: |-
A cursor token to use to retrieve the next page of results by making another API call to the same endpoint with the same parameters (only changing the page_token). If specified, then more results exist on the server that were not returned, otherwise no more results exist on the server.
examples:
Default:
value:
results:
- id: "auth_token_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status: "verified"
created_at: "2026-04-01T12:00:00Z"
expires_at: "2026-05-01T12:00:00Z"
verified_at: "2026-04-02T18:30:00Z"
next_page_token: null
ListGrantsResponse:
description: The response for Grants.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/Grant"
nextPageToken:
type: string
nullable: true
description: |-
A cursor token to use to retrieve the next page of results by making another API call to the same endpoint with the same parameters (only changing the pageToken). If specified, then more results exist on the server that were not returned, otherwise no more results exist on the server.
example:
results:
- id: "1e60800e-849b-43d1-870e-57afc8d75473"
workflowSessionId: "cfe09e64-6a74-4dab-a565-361185a6f248"
fundId: "daf-id"
createdAt: "2021-08-10 15:00:00.000"
updatedAt: "2021-08-11 15:34:00.000"
amount: 15000
status: "Initiated"
nextPageToken: "c3f685f2-2dda-4956-815b-39867a5e5638"
ListRecurringGrantsResponse:
description: The response for RecurringGrants.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/RecurringGrant"
nextPageToken:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call to the same endpoint with the same parameters (only changing the pageToken). If specified, then more results exist on the server that were not returned, otherwise no more results exist on the server.
example:
results:
- id: "29650c10-1eb3-4f97-a63e-f2e41c145b53"
workflowSessionId: "b76fa69f-c554-43b2-af9a-1d4bb9a02016"
fundId: "daf-id"
createdAt: "2021-08-10 15:00:00.000"
updatedAt: "2021-08-11 15:34:00.000"
amount: 15000
frequency: MONTHLY
nextPageToken: "c3f685f2-2dda-4956-815b-39867a5e5638"
ListUnintegratedGrantsResponse:
description: The response for UnintegratedGrants.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/UnintegratedGrant"
nextPageToken:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
example:
results:
- id: "1e60800e-849b-43d1-870e-57afc8d75473"
workflowSessionId: "cfe09e64-6a74-4dab-a565-361185a6f248"
fundId: "daf-id"
createdAt: "2021-08-10 15:00:00.000"
updatedAt: "2021-08-11 15:34:00.000"
amount: 15000
nextPageToken: "c3f685f2-2dda-4956-815b-39867a5e5638"
ListEventsResponse:
description: The response for Events.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/Event"
nextPageToken:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListEventSubscriptionsResponse:
description: The response for Events.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/EventSubscription"
nextPageToken:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
SearchOrganizationsResponse:
description: The response for Organizations.search
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/OrganizationSummary"
ListDisbursementsResponse:
description: The response for Disbursements.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/Disbursement"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
examples:
ListDisbursements:
$ref: "#/components/examples/ListDisbursements"
ListInboundTransfersResponse:
description: The response for InboundTransfers.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/InboundTransfer"
nextPageToken:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListOutboundTransfersResponse:
description: The response for OutboundTransfers.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/OutboundTransfer"
nextPageToken:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListDonationsResponse:
description: The response for Donations.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/Donation"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListDepositsResponse:
description: The response for Deposits.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/Deposit"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListPropertiesResponse:
description: The response for Properties.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/Property"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListPropertyOptionsResponse:
description: The response for Properties.listOptions
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/PropertyOptionValue"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListPaymentSourcesResponse:
description: The response for PaymentSources.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/PaymentSource"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListFilesResponse:
description: The response for Files.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/File"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
AssignPropertyResponse:
description: The response for Properties.assign
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
num_updated:
type: integer
description: The number of resources that were updated.
ListProgramsResponse:
description: The response for Programs.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/Program"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the pageToken). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
ListVerificationRequestsResponse:
description: The response for VerificationRequests.list
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/VerificationRequest"
next_page_token:
type: string
description: |-
A cursor token to use to retrieve the next page of results by making another API call
to the same endpoint with the same parameters (only changing the page_token). If
specified, then more results exist on the server that were not returned, otherwise
no more results exist on the server.
BadRequestError:
description: The request is invalid or contains invalid parameters
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
examples:
BadRequest:
value:
type: about:blank
title: "API Error"
status: 400
detail: "The request is invalid or contains invalid parameters."
AuthenticationError:
description: Unauthorized. The request is missing the security (OAuth2 Bearer token) requirements and the server is unable to verify the identify of the caller.
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
examples:
Unauthorized:
value:
type: about:blank
title: "API Error"
status: 401
detail: "Authentication credentials were missing or invalid."
ForbiddenError:
description: Access denied
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
examples:
Forbidden:
value:
type: about:blank
title: "API Error"
status: 403
detail: "You do not have permission to access this resource."
NotFoundError:
description: Resource Not Found
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
examples:
NotFound:
value:
type: about:blank
title: "API Error"
status: 404
detail: "The requested resource was not found."
ConflictError:
description: Resource Conflicts
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
examples:
Conflict:
value:
type: about:blank
title: "API Error"
status: 409
detail: "The request conflicts with the current state of the resource."
GoneError:
description: Resource Gone or Expired
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
examples:
Gone:
value:
type: about:blank
title: "API Error"
status: 410
detail: "The resource is no longer available."
PreconditionFailedError:
description: Precondition Failed
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
examples:
PreconditionFailed:
value:
type: about:blank
title: "API Error"
status: 412
detail: "A precondition for the request was not met."
InternalServerError:
description: Internal Server Error
headers:
X-Request-Id:
$ref: "#/components/headers/X-Request-Id"
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ProblemDetails"
examples:
InternalServerError:
value:
type: about:blank
title: "API Error"
status: 500
detail: "The server encountered an error processing your request."
examples:
DafGrantDisbursement:
summary: Disbursement with DAF grant transactions
value:
id: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
organization:
id: "org_01jpjenf5q6cawy43yxfcrxhct"
name: "Local Community Foundation"
ein: "123456789"
parent_organization_id: "org_01j8rs605a4gctmbm58d87mvsk"
physical_address:
line1: "456 Oak Avenue"
line2: "Suite 200"
city: "San Francisco"
state: "CA"
postal_code: "94105"
country: "US"
classification:
group_exemption_number: "0000"
subsection_code:
code: 3
name: "501(C)(3)"
description: "Organizations described in section 501(c)(3)"
filing_requirement_code:
code: 1
name: "990_REQUIRED"
description: "990 - Required to file Form 990"
foundation_code:
code: 15
name: "PUBLIC_CHARITY"
description: "Organization that normally receives a substantial part of its support from a governmental unit or from the general public"
affiliation_code:
code: 3
name: "INDEPENDENT"
description: "Independent - the organization is an independent organization"
organization_code:
code: 1
name: "CORPORATION"
description: "Corporation"
exempt_status_code:
code: 1
name: "UNCONDITIONAL"
description: "Unconditional Exemption"
deductibility_code:
code: 1
name: "DEDUCTIBLE"
description: "Contributions are deductible"
ntee_code:
code: "T31"
description: "Community Foundations"
parent_code: "T"
parent_description: "Philanthropy, Voluntarism & Grantmaking Foundations"
naics_code:
naics2: "81"
naics2_description: "Other Services"
naics4: "8134"
naics4_description: "Civic and Social Organizations"
naics6: "813410"
naics6_description: "Civic and Social Organizations"
compliance:
daf_eligible: true
irs_pub_78:
compliant: true
reason: "Organization found in IRS Publication 78"
last_found_at: "2026-03-01T00:00:00Z"
ofac:
compliant: true
reason: "No matches found on OFAC SDN list"
last_found_at: "2026-03-01T00:00:00Z"
foundation_code:
compliant: true
reason: "Foundation code is eligible"
last_found_at: "2026-03-01T00:00:00Z"
california_attorney_general_registry:
compliant: true
reason: "Registered with California Attorney General"
last_found_at: "2026-03-01T00:00:00Z"
california_franchise_tax_board:
compliant: true
reason: "Listed on California Franchise Tax Board"
last_found_at: "2026-03-01T00:00:00Z"
mission_statement: "Supporting local communities through education and outreach"
web:
domain: "localcommunityfoundation.org"
brand:
icon_url: "https://cdn.example.com/lcf-icon.png"
logo_url: "https://cdn.example.com/lcf-logo.png"
officers:
- name: "Sarah Johnson"
title: "Executive Director"
claimed: true
incorporation:
formation_year: "2010"
state: "CA"
ruling_date: "2010-09"
program_id: "program_01jpjenf5q6cawy43yxfcrxhct"
amount: 25000
auto_fund: false
bypass_chariot_organization_verification: false
status: "pending_approval"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
transactions:
- id: "txn_01jpjen1s23s29kkmnjsb6fzga"
amount: 15000
internal_transaction_id: "GRANT-001"
net_amount: 15000
type: "donor_advised_fund_grant"
purpose: "General Operating Support"
note: "Allocate to education programs"
donors:
primary_donor:
first_name: "Jane"
last_name: "Doe"
email: "jane.doe@example.com"
daf_grant:
fund_name: "Doe Family Charitable Fund"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
- id: "txn_02jpjen1s23s29kkmnjsb6fzga"
amount: 10000
internal_transaction_id: "MATCH-001"
net_amount: 10000
type: "corporate_match"
purpose: "Corporate matching gift"
note: "Matched employee donation"
donors:
primary_donor:
first_name: "John"
last_name: "Smith"
email: "john.smith@example.com"
corporate_match:
company_name: "Acme Corporation"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
ApprovedDafGrantDisbursement:
summary: Approved disbursement with DAF grant transactions
value:
id: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
organization:
id: "org_01jpjenf5q6cawy43yxfcrxhct"
name: "Local Community Foundation"
ein: "123456789"
parent_organization_id: "org_01j8rs605a4gctmbm58d87mvsk"
physical_address:
line1: "456 Oak Avenue"
line2: "Suite 200"
city: "San Francisco"
state: "CA"
postal_code: "94105"
country: "US"
classification:
group_exemption_number: "0000"
subsection_code:
code: 3
name: "501(C)(3)"
description: "Organizations described in section 501(c)(3)"
filing_requirement_code:
code: 1
name: "990_REQUIRED"
description: "990 - Required to file Form 990"
foundation_code:
code: 15
name: "PUBLIC_CHARITY"
description: "Organization that normally receives a substantial part of its support from a governmental unit or from the general public"
affiliation_code:
code: 3
name: "INDEPENDENT"
description: "Independent - the organization is an independent organization"
organization_code:
code: 1
name: "CORPORATION"
description: "Corporation"
exempt_status_code:
code: 1
name: "UNCONDITIONAL"
description: "Unconditional Exemption"
deductibility_code:
code: 1
name: "DEDUCTIBLE"
description: "Contributions are deductible"
ntee_code:
code: "T31"
description: "Community Foundations"
parent_code: "T"
parent_description: "Philanthropy, Voluntarism & Grantmaking Foundations"
naics_code:
naics2: "81"
naics2_description: "Other Services"
naics4: "8134"
naics4_description: "Civic and Social Organizations"
naics6: "813410"
naics6_description: "Civic and Social Organizations"
compliance:
daf_eligible: true
irs_pub_78:
compliant: true
reason: "Organization found in IRS Publication 78"
last_found_at: "2026-03-01T00:00:00Z"
ofac:
compliant: true
reason: "No matches found on OFAC SDN list"
last_found_at: "2026-03-01T00:00:00Z"
foundation_code:
compliant: true
reason: "Foundation code is eligible"
last_found_at: "2026-03-01T00:00:00Z"
california_attorney_general_registry:
compliant: true
reason: "Registered with California Attorney General"
last_found_at: "2026-03-01T00:00:00Z"
california_franchise_tax_board:
compliant: true
reason: "Listed on California Franchise Tax Board"
last_found_at: "2026-03-01T00:00:00Z"
mission_statement: "Supporting local communities through education and outreach"
web:
domain: "localcommunityfoundation.org"
brand:
icon_url: "https://cdn.example.com/lcf-icon.png"
logo_url: "https://cdn.example.com/lcf-logo.png"
officers:
- name: "Sarah Johnson"
title: "Executive Director"
claimed: true
incorporation:
formation_year: "2010"
state: "CA"
ruling_date: "2010-09"
program_id: "program_01jpjenf5q6cawy43yxfcrxhct"
amount: 25000
auto_fund: false
bypass_chariot_organization_verification: false
status: "awaiting_verification"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:30:00Z"
approval:
approved_at: "2026-04-01T12:30:00Z"
transactions:
- id: "txn_01jpjen1s23s29kkmnjsb6fzga"
amount: 15000
internal_transaction_id: "GRANT-001"
net_amount: 15000
type: "donor_advised_fund_grant"
purpose: "General Operating Support"
note: "Allocate to education programs"
donors:
primary_donor:
first_name: "Jane"
last_name: "Doe"
email: "jane.doe@example.com"
daf_grant:
fund_name: "Doe Family Charitable Fund"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
BulkCreateDisbursements:
summary: Multiple disbursements created
value:
disbursements:
- id: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
organization:
id: "org_01jpjenf5q6cawy43yxfcrxhct"
name: "Local Community Foundation"
ein: "123456789"
parent_organization_id: "org_01j8rs605a4gctmbm58d87mvsk"
physical_address:
line1: "456 Oak Avenue"
line2: "Suite 200"
city: "San Francisco"
state: "CA"
postal_code: "94105"
country: "US"
classification:
group_exemption_number: "0000"
subsection_code:
code: 3
name: "501(C)(3)"
description: "Organizations described in section 501(c)(3)"
filing_requirement_code:
code: 1
name: "990_REQUIRED"
description: "990 - Required to file Form 990"
foundation_code:
code: 15
name: "PUBLIC_CHARITY"
description: "Organization that normally receives a substantial part of its support from a governmental unit or from the general public"
affiliation_code:
code: 3
name: "INDEPENDENT"
description: "Independent - the organization is an independent organization"
organization_code:
code: 1
name: "CORPORATION"
description: "Corporation"
exempt_status_code:
code: 1
name: "UNCONDITIONAL"
description: "Unconditional Exemption"
deductibility_code:
code: 1
name: "DEDUCTIBLE"
description: "Contributions are deductible"
ntee_code:
code: "T31"
description: "Community Foundations"
parent_code: "T"
parent_description: "Philanthropy, Voluntarism & Grantmaking Foundations"
naics_code:
naics2: "81"
naics2_description: "Other Services"
naics4: "8134"
naics4_description: "Civic and Social Organizations"
naics6: "813410"
naics6_description: "Civic and Social Organizations"
compliance:
daf_eligible: true
irs_pub_78:
compliant: true
reason: "Organization found in IRS Publication 78"
last_found_at: "2026-03-01T00:00:00Z"
ofac:
compliant: true
reason: "No matches found on OFAC SDN list"
last_found_at: "2026-03-01T00:00:00Z"
foundation_code:
compliant: true
reason: "Foundation code is eligible"
last_found_at: "2026-03-01T00:00:00Z"
california_attorney_general_registry:
compliant: true
reason: "Registered with California Attorney General"
last_found_at: "2026-03-01T00:00:00Z"
california_franchise_tax_board:
compliant: true
reason: "Listed on California Franchise Tax Board"
last_found_at: "2026-03-01T00:00:00Z"
mission_statement: "Supporting local communities through education and outreach"
web:
domain: "localcommunityfoundation.org"
brand:
icon_url: "https://cdn.example.com/lcf-icon.png"
logo_url: "https://cdn.example.com/lcf-logo.png"
officers:
- name: "Sarah Johnson"
title: "Executive Director"
claimed: true
incorporation:
formation_year: "2010"
state: "CA"
ruling_date: "2010-09"
program_id: "program_01jpjenf5q6cawy43yxfcrxhct"
amount: 25000
auto_fund: false
bypass_chariot_organization_verification: false
status: "pending_approval"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
transactions:
- id: "txn_01jpjen1s23s29kkmnjsb6fzga"
amount: 15000
internal_transaction_id: "GRANT-001"
net_amount: 15000
type: "donor_advised_fund_grant"
purpose: "General Operating Support"
note: "Allocate to education programs"
donors:
primary_donor:
first_name: "Jane"
last_name: "Doe"
email: "jane.doe@example.com"
daf_grant:
fund_name: "Doe Family Charitable Fund"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
- id: "txn_02jpjen1s23s29kkmnjsb6fzga"
amount: 10000
internal_transaction_id: "MATCH-001"
net_amount: 10000
type: "corporate_match"
purpose: "Corporate matching gift"
note: "Matched employee donation"
donors:
primary_donor:
first_name: "John"
last_name: "Smith"
email: "john.smith@example.com"
corporate_match:
company_name: "Acme Corporation"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
- id: "disbursement_02jpjen1s23s29kkmnjsb6fzga"
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
organization:
id: "org_01jpjenf5q6cawy43yxfcrxhct"
name: "Local Community Foundation"
ein: "123456789"
parent_organization_id: "org_01j8rs605a4gctmbm58d87mvsk"
physical_address:
line1: "456 Oak Avenue"
line2: "Suite 200"
city: "San Francisco"
state: "CA"
postal_code: "94105"
country: "US"
classification:
group_exemption_number: "0000"
subsection_code:
code: 3
name: "501(C)(3)"
description: "Organizations described in section 501(c)(3)"
filing_requirement_code:
code: 1
name: "990_REQUIRED"
description: "990 - Required to file Form 990"
foundation_code:
code: 15
name: "PUBLIC_CHARITY"
description: "Organization that normally receives a substantial part of its support from a governmental unit or from the general public"
affiliation_code:
code: 3
name: "INDEPENDENT"
description: "Independent - the organization is an independent organization"
organization_code:
code: 1
name: "CORPORATION"
description: "Corporation"
exempt_status_code:
code: 1
name: "UNCONDITIONAL"
description: "Unconditional Exemption"
deductibility_code:
code: 1
name: "DEDUCTIBLE"
description: "Contributions are deductible"
ntee_code:
code: "T31"
description: "Community Foundations"
parent_code: "T"
parent_description: "Philanthropy, Voluntarism & Grantmaking Foundations"
naics_code:
naics2: "81"
naics2_description: "Other Services"
naics4: "8134"
naics4_description: "Civic and Social Organizations"
naics6: "813410"
naics6_description: "Civic and Social Organizations"
compliance:
daf_eligible: true
irs_pub_78:
compliant: true
reason: "Organization found in IRS Publication 78"
last_found_at: "2026-03-01T00:00:00Z"
ofac:
compliant: true
reason: "No matches found on OFAC SDN list"
last_found_at: "2026-03-01T00:00:00Z"
foundation_code:
compliant: true
reason: "Foundation code is eligible"
last_found_at: "2026-03-01T00:00:00Z"
california_attorney_general_registry:
compliant: true
reason: "Registered with California Attorney General"
last_found_at: "2026-03-01T00:00:00Z"
california_franchise_tax_board:
compliant: true
reason: "Listed on California Franchise Tax Board"
last_found_at: "2026-03-01T00:00:00Z"
mission_statement: "Supporting local communities through education and outreach"
web:
domain: "localcommunityfoundation.org"
brand:
icon_url: "https://cdn.example.com/lcf-icon.png"
logo_url: "https://cdn.example.com/lcf-logo.png"
officers:
- name: "Sarah Johnson"
title: "Executive Director"
claimed: true
incorporation:
formation_year: "2010"
state: "CA"
ruling_date: "2010-09"
program_id: "program_01jpjenf5q6cawy43yxfcrxhct"
amount: 20000
auto_fund: false
bypass_chariot_organization_verification: false
status: "pending_approval"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
transactions:
- id: "txn_03jpjen1s23s29kkmnjsb6fzga"
amount: 12000
internal_transaction_id: "GRANT-002"
net_amount: 12000
type: "donor_advised_fund_grant"
purpose: "Youth Programs"
note: "Annual grant for youth services"
donors:
primary_donor:
first_name: "Alice"
last_name: "Williams"
email: "alice.williams@example.com"
daf_grant:
fund_name: "Williams Family Foundation"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
- id: "txn_04jpjen1s23s29kkmnjsb6fzga"
amount: 8000
internal_transaction_id: "MATCH-002"
net_amount: 8000
type: "corporate_match"
purpose: "Corporate matching gift"
note: "Matched employee donation"
donors:
primary_donor:
first_name: "Bob"
last_name: "Chen"
email: "bob.chen@example.com"
corporate_match:
company_name: "TechCorp Inc."
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
count: 2
ListDisbursements:
summary: List of disbursements
value:
results:
- id: "disbursement_01jpjen1s23s29kkmnjsb6fzga"
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
organization:
id: "org_01jpjenf5q6cawy43yxfcrxhct"
name: "Local Community Foundation"
ein: "123456789"
parent_organization_id: "org_01j8rs605a4gctmbm58d87mvsk"
physical_address:
line1: "456 Oak Avenue"
line2: "Suite 200"
city: "San Francisco"
state: "CA"
postal_code: "94105"
country: "US"
classification:
group_exemption_number: "0000"
subsection_code:
code: 3
name: "501(C)(3)"
description: "Organizations described in section 501(c)(3)"
filing_requirement_code:
code: 1
name: "990_REQUIRED"
description: "990 - Required to file Form 990"
foundation_code:
code: 15
name: "PUBLIC_CHARITY"
description: "Organization that normally receives a substantial part of its support from a governmental unit or from the general public"
affiliation_code:
code: 3
name: "INDEPENDENT"
description: "Independent - the organization is an independent organization"
organization_code:
code: 1
name: "CORPORATION"
description: "Corporation"
exempt_status_code:
code: 1
name: "UNCONDITIONAL"
description: "Unconditional Exemption"
deductibility_code:
code: 1
name: "DEDUCTIBLE"
description: "Contributions are deductible"
ntee_code:
code: "T31"
description: "Community Foundations"
parent_code: "T"
parent_description: "Philanthropy, Voluntarism & Grantmaking Foundations"
naics_code:
naics2: "81"
naics2_description: "Other Services"
naics4: "8134"
naics4_description: "Civic and Social Organizations"
naics6: "813410"
naics6_description: "Civic and Social Organizations"
compliance:
daf_eligible: true
irs_pub_78:
compliant: true
reason: "Organization found in IRS Publication 78"
last_found_at: "2026-03-01T00:00:00Z"
ofac:
compliant: true
reason: "No matches found on OFAC SDN list"
last_found_at: "2026-03-01T00:00:00Z"
foundation_code:
compliant: true
reason: "Foundation code is eligible"
last_found_at: "2026-03-01T00:00:00Z"
california_attorney_general_registry:
compliant: true
reason: "Registered with California Attorney General"
last_found_at: "2026-03-01T00:00:00Z"
california_franchise_tax_board:
compliant: true
reason: "Listed on California Franchise Tax Board"
last_found_at: "2026-03-01T00:00:00Z"
mission_statement: "Supporting local communities through education and outreach"
web:
domain: "localcommunityfoundation.org"
brand:
icon_url: "https://cdn.example.com/lcf-icon.png"
logo_url: "https://cdn.example.com/lcf-logo.png"
officers:
- name: "Sarah Johnson"
title: "Executive Director"
claimed: true
incorporation:
formation_year: "2010"
state: "CA"
ruling_date: "2010-09"
program_id: "program_01jpjenf5q6cawy43yxfcrxhct"
amount: 25000
auto_fund: false
bypass_chariot_organization_verification: false
status: "pending_approval"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
transactions:
- id: "txn_01jpjen1s23s29kkmnjsb6fzga"
amount: 15000
internal_transaction_id: "GRANT-001"
net_amount: 15000
type: "donor_advised_fund_grant"
purpose: "General Operating Support"
note: "Allocate to education programs"
donors:
primary_donor:
first_name: "Jane"
last_name: "Doe"
email: "jane.doe@example.com"
daf_grant:
fund_name: "Doe Family Charitable Fund"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
- id: "txn_02jpjen1s23s29kkmnjsb6fzga"
amount: 10000
internal_transaction_id: "MATCH-001"
net_amount: 10000
type: "corporate_match"
purpose: "Corporate matching gift"
note: "Matched employee donation"
donors:
primary_donor:
first_name: "John"
last_name: "Smith"
email: "john.smith@example.com"
corporate_match:
company_name: "Acme Corporation"
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
- id: "disbursement_02jpjen1s23s29kkmnjsb6fzga"
organization_id: "org_01jpjenf5q6cawy43yxfcrxhct"
organization:
id: "org_01jpjenf5q6cawy43yxfcrxhct"
name: "Local Community Foundation"
ein: "123456789"
parent_organization_id: "org_01j8rs605a4gctmbm58d87mvsk"
physical_address:
line1: "456 Oak Avenue"
line2: "Suite 200"
city: "San Francisco"
state: "CA"
postal_code: "94105"
country: "US"
classification:
group_exemption_number: "0000"
subsection_code:
code: 3
name: "501(C)(3)"
description: "Organizations described in section 501(c)(3)"
filing_requirement_code:
code: 1
name: "990_REQUIRED"
description: "990 - Required to file Form 990"
foundation_code:
code: 15
name: "PUBLIC_CHARITY"
description: "Organization that normally receives a substantial part of its support from a governmental unit or from the general public"
affiliation_code:
code: 3
name: "INDEPENDENT"
description: "Independent - the organization is an independent organization"
organization_code:
code: 1
name: "CORPORATION"
description: "Corporation"
exempt_status_code:
code: 1
name: "UNCONDITIONAL"
description: "Unconditional Exemption"
deductibility_code:
code: 1
name: "DEDUCTIBLE"
description: "Contributions are deductible"
ntee_code:
code: "T31"
description: "Community Foundations"
parent_code: "T"
parent_description: "Philanthropy, Voluntarism & Grantmaking Foundations"
naics_code:
naics2: "81"
naics2_description: "Other Services"
naics4: "8134"
naics4_description: "Civic and Social Organizations"
naics6: "813410"
naics6_description: "Civic and Social Organizations"
compliance:
daf_eligible: true
irs_pub_78:
compliant: true
reason: "Organization found in IRS Publication 78"
last_found_at: "2026-03-01T00:00:00Z"
ofac:
compliant: true
reason: "No matches found on OFAC SDN list"
last_found_at: "2026-03-01T00:00:00Z"
foundation_code:
compliant: true
reason: "Foundation code is eligible"
last_found_at: "2026-03-01T00:00:00Z"
california_attorney_general_registry:
compliant: true
reason: "Registered with California Attorney General"
last_found_at: "2026-03-01T00:00:00Z"
california_franchise_tax_board:
compliant: true
reason: "Listed on California Franchise Tax Board"
last_found_at: "2026-03-01T00:00:00Z"
mission_statement: "Supporting local communities through education and outreach"
web:
domain: "localcommunityfoundation.org"
brand:
icon_url: "https://cdn.example.com/lcf-icon.png"
logo_url: "https://cdn.example.com/lcf-logo.png"
officers:
- name: "Sarah Johnson"
title: "Executive Director"
claimed: true
incorporation:
formation_year: "2010"
state: "CA"
ruling_date: "2010-09"
program_id: "program_01jpjenf5q6cawy43yxfcrxhct"
amount: 20000
auto_fund: false
bypass_chariot_organization_verification: false
status: "completed"
created_at: "2026-03-15T12:00:00Z"
updated_at: "2026-03-20T12:00:00Z"
transactions:
- id: "txn_03jpjen1s23s29kkmnjsb6fzga"
amount: 12000
internal_transaction_id: "GRANT-002"
net_amount: 12000
type: "donor_advised_fund_grant"
purpose: "Youth Programs"
note: "Annual grant for youth services"
donors:
primary_donor:
first_name: "Alice"
last_name: "Williams"
email: "alice.williams@example.com"
daf_grant:
fund_name: "Williams Family Foundation"
created_at: "2026-03-15T12:00:00Z"
updated_at: "2026-03-20T12:00:00Z"
- id: "txn_04jpjen1s23s29kkmnjsb6fzga"
amount: 8000
internal_transaction_id: "MATCH-002"
net_amount: 8000
type: "corporate_match"
purpose: "Corporate matching gift"
note: "Matched employee donation"
donors:
primary_donor:
first_name: "Bob"
last_name: "Chen"
email: "bob.chen@example.com"
corporate_match:
company_name: "TechCorp Inc."
created_at: "2026-03-15T12:00:00Z"
updated_at: "2026-03-20T12:00:00Z"
next_page_token: "eyJsYXN0X2lkIjoiZGlzYnVyc2VtZW50XzAyanBqZW4xcz"
NonprofitRedCross:
summary: American Red Cross
value:
id: "021cf6aa-cb91-4b92-ae03-82a211cc8328"
name: "American Red Cross"
ein: "530196605"
createdAt: "2021-07-10 15:00:00.000"
updatedAt: "2020-01-31T23:59:59Z"
isDafPayNetwork: false
inGoodStanding: true
ConnectOutput:
summary: Simple connect output
value:
id: "test_de5a2e7d-c960-4eaa-8bd2-e8d2cc5b1a55"
name: "website"
apiKey: "test_98235982835"
active: true
createdAt: "2021-07-10 15:00:00.000"
updatedAt: "2020-01-31T23:59:59Z"
createdBy: "user123"
metadata:
tag1: "value1"
GrantOutput:
summary: Simple grant output
value:
id: "1e60800e-849b-43d1-870e-57afc8d75473"
workflowSessionId: "cfe09e64-6a74-4dab-a565-361185a6f248"
fundId: "daf-id"
createdAt: "2021-08-10 15:00:00.000"
updatedAt: "2021-08-11 15:34:00.000"
amount: 15000
status: "Initiated"
RecurringGrantOutput:
summary: Simple recurring grant output.
value:
id: "1e60800e-849b-43d1-870e-57afc8d75473"
workflowSessionId: "cfe09e64-6a74-4dab-a565-361185a6f248"
fundId: "daf-id"
createdAt: "2021-08-10 15:00:00.000"
updatedAt: "2021-08-11 15:34:00.000"
amount: 15000
frequency: MONTHLY
UnintegratedGrantOutput:
summary: Simple unintegrated grant output
value:
id: "1e60800e-849b-43d1-870e-57afc8d75473"
workflowSessionId: "cfe09e64-6a74-4dab-a565-361185a6f248"
fundId: "daf-id"
createdAt: "2021-08-10 15:00:00.000"
updatedAt: "2021-08-11 15:34:00.000"
amount: 15000
DafOutput:
summary: NPT DAF
value:
id: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
orgName: "National Philanthropic Trust"
address: "123 Main St."
address2: "Apt 100"
city: "New York City"
state: "New York"
zip: "12345"
supported: true
minimumGrantAmount: 25000
institutionDown: false
DonorAccountOutput:
summary: Pending donor account
value:
id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status: "pending"
donor:
email: "warrenBuffet@example.com"
first_name: null
last_name: null
phone: null
external_id: "ACME-DAF-DONOR-1042"
approval: null
rejection: null
disabled: false
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-01T12:00:00Z"
DonorAccountApprovedOutput:
summary: Approved donor account
value:
id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status: "approved"
donor:
email: "warrenBuffet@example.com"
first_name: "Warren"
last_name: "Buffet"
phone: "+12125550100"
external_id: "ACME-DAF-DONOR-1042"
approval:
approved_at: "2026-04-02T18:30:00Z"
approved_by: "daf:fid_01jpjenf5q6cawy43yxfcrxhct"
rejection: null
disabled: false
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-02T18:30:00Z"
DonorAccountDisabledOutput:
summary: Approved donor account that has been disabled
value:
id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status: "approved"
donor:
email: "warrenBuffet@example.com"
first_name: "Warren"
last_name: "Buffet"
phone: "+12125550100"
external_id: "ACME-DAF-DONOR-1042"
approval:
approved_at: "2026-04-02T18:30:00Z"
approved_by: "daf:fid_01jpjenf5q6cawy43yxfcrxhct"
rejection: null
disabled: true
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-05T09:00:00Z"
DonorAccountEnabledOutput:
summary: Previously-disabled donor account that has been re-enabled
value:
id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status: "approved"
donor:
email: "warrenBuffet@example.com"
first_name: "Warren"
last_name: "Buffet"
phone: "+12125550100"
external_id: "ACME-DAF-DONOR-1042"
approval:
approved_at: "2026-04-02T18:30:00Z"
approved_by: "daf:fid_01jpjenf5q6cawy43yxfcrxhct"
rejection: null
disabled: false
created_at: "2026-04-01T12:00:00Z"
updated_at: "2026-04-06T11:00:00Z"
GrantRequestPendingOutput:
summary: Grant Request awaiting your decision
value:
id: "grant_req_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
giving_pool_id: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
status: "pending"
ein: "53-0196605"
nonprofit_name: "American Red Cross"
amount_cents: 10000
frequency: "one_time"
form_url: "https://example.org/donate"
purpose: "Disaster relief"
note: "Thank you for your service."
donor_contact:
name: "Warren Buffet"
email: "warrenBuffet@example.com"
phone: "+12125550100"
address:
line1: "3555 Farnam Street"
line2: null
city: "Omaha"
state: "NE"
zip: "68131"
rejection_reason: null
created_at: "2026-04-03T14:22:00Z"
updated_at: "2026-04-03T14:22:00Z"
GrantRequestAwaitingAccountDecisionOutput:
summary: Grant Request waiting on Donor Account approval
value:
id: "grant_req_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
giving_pool_id: null
status: "awaiting_account_decision"
ein: "53-0196605"
nonprofit_name: "American Red Cross"
amount_cents: 10000
frequency: "one_time"
form_url: "https://example.org/donate"
purpose: null
note: null
donor_contact:
name: "Warren Buffet"
email: "warrenBuffet@example.com"
phone: "+12125550100"
address:
line1: "3555 Farnam Street"
line2: null
city: "Omaha"
state: "NE"
zip: "68131"
rejection_reason: null
created_at: "2026-04-01T11:55:00Z"
updated_at: "2026-04-01T11:55:00Z"
GrantRequestSubmittedOutput:
summary: Grant Request you have submitted in your system
value:
id: "grant_req_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
giving_pool_id: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
status: "submitted"
ein: "53-0196605"
nonprofit_name: "American Red Cross"
amount_cents: 10000
frequency: "one_time"
form_url: "https://example.org/donate"
purpose: "Disaster relief"
note: "Thank you for your service."
donor_contact:
name: "Warren Buffet"
email: "warrenBuffet@example.com"
phone: "+12125550100"
address:
line1: "3555 Farnam Street"
line2: null
city: "Omaha"
state: "NE"
zip: "68131"
rejection_reason: null
created_at: "2026-04-03T14:22:00Z"
updated_at: "2026-04-04T09:15:00Z"
GrantRequestRejectedOutput:
summary: Grant Request you have rejected
value:
id: "grant_req_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
giving_pool_id: "0bf40881-8ee2-47fb-98ca-f58c7999aa34"
status: "rejected"
ein: "53-0196605"
nonprofit_name: "American Red Cross"
amount_cents: 10000
frequency: "one_time"
form_url: "https://example.org/donate"
purpose: "Disaster relief"
note: "Thank you for your service."
donor_contact:
name: "Warren Buffet"
email: "warrenBuffet@example.com"
phone: "+12125550100"
address:
line1: "3555 Farnam Street"
line2: null
city: "Omaha"
state: "NE"
zip: "68131"
rejection_reason: "Grant amount exceeds donor's available balance."
created_at: "2026-04-03T14:22:00Z"
updated_at: "2026-04-04T09:15:00Z"
DonorAuthorizationTokenCreatedOutput:
summary: Newly created authorization token (code is only present on creation)
value:
id: "auth_token_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status: "pending"
code: "DAFP-7K3X-9M4Q"
created_at: "2026-04-01T12:00:00Z"
expires_at: "2026-05-01T12:00:00Z"
DonorAuthorizationTokenOutput:
summary: Authorization token (post-creation; code is omitted)
value:
id: "auth_token_01jpjenf5q6cawy43yxfcrxhct"
donor_account_id: "donor_account_01jpjenf5q6cawy43yxfcrxhct"
status: "verified"
created_at: "2026-04-01T12:00:00Z"
expires_at: "2026-05-01T12:00:00Z"
verified_at: "2026-04-02T18:30:00Z"