OpenAPI Specification
openapi: 3.0.0
info:
title: Chariot FDX Accounts Customers API
version: '6.0'
description: Financial Data Exchange (FDX) v6 compatible API for read-only access to Chariot bank account data. Implements the FDX v6 standard for account information, transactions, and statements.
contact:
name: Chariot Development Team
url: https://givechariot.com/contact
email: developers@givechariot.com
servers:
- url: https://api.givechariot.com/fdx/v6
description: Production
- url: https://devapi.givechariot.com/fdx/v6
description: Staging
security:
- oauth2: []
tags:
- name: Customers
description: Account customer (organization) identity
paths:
/customers/current:
get:
summary: Get current customer
description: Get the organization-level identity for the current authenticated customer. Returns org-level data (nonprofit name, EIN, address). Individual control-person data is excluded because consent is org-level.
operationId: getCurrentCustomer
tags:
- Customers
responses:
'200':
description: The current authenticated customer
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/accounts/{id}/customers:
get:
summary: List account customers
description: Get the customers associated with an account. Returns organization-level identity (nonprofit name, EIN, address).
operationId: listAccountCustomers
tags:
- Customers
parameters:
- $ref: '#/components/parameters/AccountId'
responses:
'200':
description: The list of customers for the account
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
components:
parameters:
AccountId:
name: id
in: path
required: true
description: Unique identifier for the account
schema:
type: string
format: uuid
schemas:
Page:
type: object
description: Pagination metadata for list responses.
properties:
nextPageKey:
type: string
description: Cursor token to retrieve the next page of results. Absent when there are no more results.
totalElements:
type: integer
description: Total number of elements across all pages
CustomerListResponse:
type: object
description: Paginated list of customers.
required:
- customers
properties:
page:
$ref: '#/components/schemas/Page'
customers:
type: array
items:
$ref: '#/components/schemas/Customer'
Customer:
type: object
description: A customer (organization) associated with an account.
required:
- customerId
- name
- type
properties:
customerId:
type: string
description: Unique identifier for the customer
name:
$ref: '#/components/schemas/PersonName'
taxId:
type: string
description: Tax identification number (e.g., EIN)
type:
$ref: '#/components/schemas/CustomerType'
addresses:
type: array
items:
$ref: '#/components/schemas/AccountAddress'
businessCustomer:
$ref: '#/components/schemas/BusinessCustomer'
AccountAddress:
type: object
description: A postal address.
required:
- line1
- city
- region
- postalCode
- country
properties:
line1:
type: string
line2:
type: string
line3:
type: string
city:
type: string
region:
type: string
description: State or region code
postalCode:
type: string
country:
type: string
description: ISO 3166-1 alpha-2 country code
PersonName:
type: object
description: A person's name.
properties:
first:
type: string
middle:
type: string
last:
type: string
suffix:
type: string
prefix:
type: string
company:
type: string
ProblemDetails:
type: object
description: Error response following RFC 7807 Problem Details for HTTP APIs.
required:
- type
- title
- status
properties:
type:
type: string
description: A URI reference that identifies the problem type
example: about:blank
title:
type: string
description: A short human-readable summary of the problem type
example: Bad Request
status:
type: integer
description: The HTTP status code
example: 400
detail:
type: string
description: A human-readable explanation specific to this occurrence of the problem
example: The startTime parameter must be before endTime
instance:
type: string
description: A URI reference that identifies the specific occurrence of the problem
CustomerType:
type: string
description: Type of customer
enum:
- BUSINESS
- INDIVIDUAL
BusinessCustomer:
type: object
description: Business customer information.
required:
- name
properties:
name:
type: string
description: Legal business name
registeredId:
type: string
description: Registered identifier (e.g., EIN)
responses:
Forbidden:
description: Insufficient permissions or IP not whitelisted
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ProblemDetails'
Unauthorized:
description: Missing or invalid OAuth 2.0 Bearer token
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ProblemDetails'
InternalServerError:
description: Unexpected server error
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ProblemDetails'
NotFound:
description: Resource not found
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ProblemDetails'
securitySchemes:
oauth2:
type: oauth2
description: OAuth 2.0 Bearer token. A client may hold both scopes, but each FDX authorization must contain exactly one — they are mutually exclusive per authorization. An authorization containing both will be rejected. See the Authentication page for token exchange details.
flows:
authorizationCode:
authorizationUrl: https://dashboard.givechariot.com/oauth/authorize
tokenUrl: https://api.givechariot.com/auth/oauth/token
scopes:
read:bank_accounts: Read access to bank account data
sync:connected_accounts: Sync access to connected account data