Chariot disbursements API
The disbursements API from Chariot — 9 operation(s) for disbursements.
The disbursements API from Chariot — 9 operation(s) for disbursements.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/chariot-disbursements-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Chariot Disbursements 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
tags:
- name: disbursements
paths:
/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.\nPossible values include:\n - `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`.
<Note title="Sandbox Only" icon="fa-light fa-atom-simple">
This API is only available in the sandbox environment.
</Note>
'
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.
<Note title="Sandbox Only" icon="fa-light fa-atom-simple">
This API is only available in the sandbox environment.
</Note>
'
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'
components:
schemas:
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
TransactionDafGrant:
type:
- object
- 'null'
description: A simplified DAF grant object containing the fund name.
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
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.\nPossible values include:\n - `initiated`: The ACH transfer has been initiated and is pending submission to the Federal Reserve.\n - `submitted`: The ACH transfer has been submitted to the Federal Reserve.\n - `completed`: The ACH transfer has been completed. Funds should be settled.\n - `rejected`: The ACH transfer was rejected.\n - `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
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.\nThe set of event types include:\n - `in_transit`: The check has been processed by the origin facility.\n - `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.\n - `delivered`: The check has been delivered to the recipient's address.\n - `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'
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'
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.\nThe set of statuses include:\n - `pending`: The check is pending review by Chariot.\n - `canceled`: The check has been canceled.\n - `issued`: The check has been mailed and is pending delivery.\n - `rejected`: The check was rejected by Chariot.\n - `deposited`: The check has been deposited by the receiving organization.\n - `stopped`: A stop payment was requested on the check.\n - `returned`: The check has been returned by the receiving organization.\n\nTo see a more detailed description of each status and the overall lifecycle of check disbursements,\nsee 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'
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
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'
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
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'
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
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
# --- truncated at 32 KB (105 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/chariot/refs/heads/main/openapi/chariot-disbursements-api-openapi.yml