Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/quickbooks:quickbooks-echecks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: QuickBooks Payments E Checks API
version: '2026-11-05'
description: 'QuickBooks Payments API (v4): bank accounts, cards, charges, eChecks, tokens and payment receipts for a QuickBooks Payments merchant. Generated from the JSON Intuit''s API Explorer renders; Intuit publishes no OpenAPI document.'
termsOfService: https://developer.intuit.com/app/developer/qbo/docs/legal-agreements/intuit-terms-of-service-for-intuit-developer-services
contact:
name: Intuit Developer Support
url: https://help.developer.intuit.com/s/
x-generated-from: documentation
x-generator: convert-intuit-api-explorer.py (deterministic conversion of the provider's API Explorer JSON; no model)
x-source:
- https://static.developer.intuit.com/JSONObjects/EntityJsonObject_v1.json
- https://static.developer.intuit.com/JSONObjects/CodesModelsJsonObjects_v2.json
- https://static.developer.intuit.com/JSONObjects/TocJsonObject_v1.json
x-generated: '2026-11-05'
servers:
- url: https://api.intuit.com
description: Production
- url: https://sandbox.api.intuit.com
description: Sandbox
security:
- oauth2:
- com.intuit.quickbooks.payment
tags:
- name: EChecks
description: 'The eCheck entity lets you create and store eCheck objects.
Apps can store and use bank accounts as a payment method for payment processing via the charges entity.
Note: This entity can only be used for US-based QuickBooks Online companies.
Available operations:POST/Create
GET/Read
Unique operationsRefund
Void'
paths:
/quickbooks/v4/payments/echecks:
post:
operationId: createEChecks
summary: Create an eCheck
tags:
- EChecks
x-source: https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/echecks
x-intuit-operation: POST /quickbooks/v4/payments/echecks
description: 'When you create an eCheck, you''ll also debit a bank account.
This POST operation creates an eCheck and debits the bank account it''s coming from.'
x-intuit-parameters-note:
- "Header Parameters: In your request, specify the request-Id as a header parameter. If the server receives another request with the same request-Id, instead of performing the operation again and potentially returning an error, it sends the same response intended for the original request.\n\n The request-Id must be unique across all requests, regardless of endpoint, for a given QuickBooks Online company.\n\n To avoid duplicates, your app should generate a unique request-Id for each request. We recommend you generate request-Id values with libraries like java.util.UUID or .NET System.GUID."
parameters:
- name: Request-Id
in: header
schema:
type: string
description: "The request-Id that uniquely identifies the HTTP request sent by your app to the server. \n\nThis lets apps correlate requests and responses in case it needs to resend a request due to a dropped connection."
required: true
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/echeckrequest'
required: true
description: 'To create an eCheck, include the following required attributes:amount
paymentMode
token or bankAccount or bankAccountOnFile
You can also include optional attributes:description
checkNumber
context'
responses:
'200':
description: This creates an eCheck and debits the bank account.
content:
application/json:
schema:
$ref: '#/components/schemas/echeckresponse'
'400':
$ref: '#/components/responses/Fault'
'401':
$ref: '#/components/responses/Fault'
'429':
$ref: '#/components/responses/Throttled'
security:
- oauth2:
- com.intuit.quickbooks.payment
/quickbooks/v4/payments/echecks/{echeck_id}/refunds/{refund_id}:
get:
operationId: readEChecks
summary: Get eCheck refund details
tags:
- EChecks
x-source: https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/echecks
x-intuit-operation: GET /quickbooks/v4/payments/echecks/<echeck_id>/refunds/<refund_id>
description: This GET operation gets info about refunded eChecks.
x-intuit-parameters-note:
- "Header Parameters: In your request, specify the request-Id as a header parameter. If the server receives another request with the same request-Id, instead of performing the operation again and potentially returning an error, it sends the same response intended for the original request.\n\n The request-Id must be unique across all requests, regardless of endpoint, for a given QuickBooks Online company.\n\n To avoid duplicates, your app should generate a unique request-Id for each request. We recommend you generate request-Id values with libraries like java.util.UUID or .NET System.GUID."
parameters:
- name: echeck_id
in: path
required: true
schema:
type: string
- name: refund_id
in: path
required: true
schema:
type: string
- name: Request-Id
in: header
schema:
type: string
description: "The request-Id that uniquely identifies the HTTP request sent by your app to the server. \n\nThis lets apps correlate requests and responses in case it needs to resend a request due to a dropped connection."
required: true
- name: echeck_id
in: query
schema:
type: string
description: The id of the eCheck you want info for. The ID is defined in the response of the CREATE eCheck operation.
required: true
- name: refund_id
in: query
schema:
type: string
description: The id of the refund you want info for. The ID is defined in the reponse of the VOID or REFUND eCheck operation.
required: true
responses:
'200':
description: Returns info about the refund object.
content:
application/json:
schema:
$ref: '#/components/schemas/echeckresponse'
'400':
$ref: '#/components/responses/Fault'
'401':
$ref: '#/components/responses/Fault'
'429':
$ref: '#/components/responses/Throttled'
security:
- oauth2:
- com.intuit.quickbooks.payment
/quickbooks/v4/payments/echecks/{echeck_id}:
get:
operationId: getECheckDetails
summary: Get eCheck details
tags:
- EChecks
x-source: https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/echecks
x-intuit-operation: GET /quickbooks/v4/payments/echecks/<echeck_id>
description: 'This GET operation gets info for an existing eCheck transaction.
Use the id field to specify the eCheck you want info for.'
x-intuit-parameters-note:
- "Header Parameters: In your request, specify the request-Id as a header parameter. If the server receives another request with the same request-Id, instead of performing the operation again and potentially returning an error, it sends the same response intended for the original request.\n\n The request-Id must be unique across all requests, regardless of endpoint, for a given QuickBooks Online company.\n\n To avoid duplicates, your app should generate a unique request-Id for each request. We recommend you generate request-Id values with libraries like java.util.UUID or .NET System.GUID."
parameters:
- name: echeck_id
in: path
required: true
schema:
type: string
- name: Request-Id
in: header
schema:
type: string
description: "The request-Id that uniquely identifies the HTTP request sent by your app to the server. \n\nThis lets apps correlate requests and responses in case it needs to resend a request due to a dropped connection."
required: true
- name: Id
in: query
schema:
type: string
description: The id of the eCheck. The ID is defined in the response of the CREATE check operation.
required: true
responses:
'200':
description: Returns info about the eCheck object.
content:
application/json:
schema:
$ref: '#/components/schemas/echeckresponse'
'400':
$ref: '#/components/responses/Fault'
'401':
$ref: '#/components/responses/Fault'
'429':
$ref: '#/components/responses/Throttled'
security:
- oauth2:
- com.intuit.quickbooks.payment
/quickbooks/v4/payments/echecks/{echeck_id}/refunds:
post:
operationId: voidEChecks
summary: Void or refund an eCheck
tags:
- EChecks
x-source: https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/echecks
x-intuit-operation: POST /quickbooks/v4/payments/echecks/<echeck_id>/refunds
description: 'This POST operation lets you fully or partially refund an eCheck transaction.
You can void eChecks if the refund request is made the same day as the created debit request.
We can''t issue refunds unless the original debit transaction is settled. This usually takes 3 business days.
Use the id field to specify the eCheck you want to refund.'
x-intuit-parameters-note:
- "Header Parameters: In your request, specify the request-Id as a header parameter. If the server receives another request with the same request-Id, instead of performing the operation again and potentially returning an error, it sends the same response intended for the original request.\n\n The request-Id must be unique across all requests, regardless of endpoint, for a given QuickBooks Online company.\n\n To avoid duplicates, your app should generate a unique request-Id for each request. We recommend you generate request-Id values with libraries like java.util.UUID or .NET System.GUID."
parameters:
- name: echeck_id
in: path
required: true
schema:
type: string
- name: Request-Id
in: header
schema:
type: string
description: "The request-Id that uniquely identifies the HTTP request sent by your app to the server. \n\nThis lets apps correlate requests and responses in case it needs to resend a request due to a dropped connection."
required: true
- name: Id
in: query
schema:
type: string
description: The id of the eCheck. The ID is defined in the response of the CREATE check operation.
required: true
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/echeckrefundrequest'
required: true
responses:
'200':
description: Returns an eCheck refund object.
content:
application/json:
schema:
$ref: '#/components/schemas/echeckresponse'
'400':
$ref: '#/components/responses/Fault'
'401':
$ref: '#/components/responses/Fault'
'429':
$ref: '#/components/responses/Throttled'
security:
- oauth2:
- com.intuit.quickbooks.payment
components:
schemas:
bankaccount:
type: object
title: bankaccount
properties:
Updated:
type: string
description: The time the object was last updated. In ISO 8601 date-time format. It appears as YYYY-MM-DDTHH:MM:SSZ.
x-intuit-required: Conditionally required
entityType:
type: string
description: 'The entity or user type the bank account is associated with. Example values: Customer, Employee, Vendor or Company'
x-intuit-required: Optional
Name:
type: string
description: The name of the bank account owner.
x-intuit-required: Required
AccountNumber:
type: string
description: "The number of the bank account.\n\n For privacy and security,\nAccount numbers that are 6 digits or less: all but the last 2 digits are masked\nAccount numbers that are 7 digits or longer: all but the last 4 digits are masked\n Account Number masking changes are available in Sandbox companies currently and will be available from July 11th, 2022 for Production companies."
x-intuit-required: Required
Default:
type: boolean
description: "Indicates if the bank account is the default. When users set a default, the account flag is true.\n\n This is the bank account QuickBooks uses when another isn't specified.\n\n The flag defaults to false. When a bank account flag is true, all other stored bank accounts are automatically set to false."
x-intuit-required: Optional
Country:
type: string
description: The ISO-standard country code. Refer to the ISO Country Code List.
x-intuit-required: Optional
Created:
type: string
description: The time the object was originally created. In ISO 8601 date-time format. It appears as YYYY-MM-DDTHH:MM:SSZ.
InputType:
type: string
description: "Specifies the input type. \n\nValid values:KEYED: Indicates a manually-entered key.\nSCANNED"
x-intuit-required: Optional
Phone:
type: string
description: The phone number associated with the bank account.
x-intuit-required: Required
AccountType:
type: string
description: "The type of bank account. \n\nValid values:PERSONAL_CHECKING: Use for personal checking accounts.\n PERSONAL_SAVINGS: Use for personal savings accounts.\nBUSINESS_CHECKING: Use for business checking accounts.\nBUSINESS_SAVINGS: Use for business savings accounts."
x-intuit-required: Required
BankCode:
type: string
description: 'For US: This should also be the routing number for the bank associated with the account.'
x-intuit-required: Optional
entityId:
type: string
description: The ID of the entity the bank account is associated with.
x-intuit-required: Optional
RoutingNumber:
type: string
description: "The routing number for the bank associated with the account.\n\n For privacy and security, we only display the last four digits of the routing number."
x-intuit-required: Required
Id:
type: string
description: "The unique identifier of a bank account object.\n\n The id is required for update or delete operations."
x-intuit-required: Conditionally required
required:
- AccountNumber
- AccountType
- Name
- Phone
- RoutingNumber
restaurant:
type: object
title: restaurant
properties:
BeverageAmount:
type: number
description: The amount of the current charge attributed to beverages.
ServerID:
type: string
description: The 2-digit string that identifies the individual server responsible for the transaction. Restaurant assign their own identifiers to their servers.
TaxAmount:
type: number
description: The amount of the current charge attributed to tax.
FoodAmount:
type: number
description: The amount of the current charge attributed to food.
TipAmount:
type: number
description: The amount of the current charge attributed to tips.
echeckrequest:
type: object
title: echeckrequest
properties:
BankAccount:
allOf:
- $ref: '#/components/schemas/bankaccount'
description: Explicit bank account details associated with this transaction. Required if neither token nor bankAccountOnFile are specified
Description:
type: string
description: Descriptive text to be stored with the transaction.
x-intuit-required: Optional
CheckNumber:
type: string
description: The number for the echeck, if desired.
x-intuit-required: Optional
PaymentMode:
type: object
x-intuit-type: ECheckPaymentModeType
description: "The payment mode. This is also known as the SEC Code. Valid options include:\n\n WEB: Internet-initiated entry mode, used for internet transactions."
x-intuit-required: Required
Token:
type: string
description: An opaque representation of the bank account associated with the debit, as returned by the token endpoint. Required if neither bankAccount nor bankAccountOnFile are specified
BankAccountOnFile:
type: string
description: The bank account details that have been previously stored on file. Required if neither token nor bankAccount are specified
Amount:
type: number
description: "Amount of the transaction. Valid values for amount are in the range\n 0.00 through\n 99999.99 ."
x-intuit-required: Required
Context:
allOf:
- $ref: '#/components/schemas/checkcontext'
description: Additional data that may be stored with the transaction.
x-intuit-required: Optional
required:
- Amount
- PaymentMode
checkcontext:
type: object
title: checkcontext
properties:
DeviceInfo:
allOf:
- $ref: '#/components/schemas/deviceinfo'
description: Info about the device used to process the payment.
x-intuit-required: Optional
lodging:
type: object
title: lodging
properties:
LengthOfStay:
type: number
description: The anticipated, actual, or icremental length of stay, depending on the transaction type.
CheckInDate:
type: string
format: date
description: "The date of actual or anticipated check-in, depending on the transaction type.\n\nThe check-in date can't be later than the check-out date. The date format is dates is CCCC-MM-DD where: CCCC: The four-digit year\nMM: The two digit month\nDD: The Two digit day\n For example: June 5, 2019 is represented as 2019-06-05."
RoomRate:
type: number
description: "The nightly rate for the room. \n\nThis field is only relevant for lodging apps. It should represent the nightly rate for the room as quoted at the time of reservation, including the taxes. If the reservation spans multiple days, provide the average rate for those days."
SpecialProgram:
type: object
x-intuit-type: SpecialProgramEnumorator
description: 'Indicates if the current charge is a normal room charge, an advance deposit, and so forth.
This field is only relevant for lodging apps. It indicates the reason for the charge.
Valid values: AdvanceDeposit
AssuredReservation
DelayedCharge
ExpressService
NormalCharge
NoShowCharge'
ChargeType:
type: object
x-intuit-type: ChargeTypeEnumerator
description: 'Indicates the specific lodging or non-lodging service charged to the customer.
Valid values: ConventionFees
GiftShop
Golf
HealthClub
Hotel
Restaurant
Salon
Tennis'
FolioID:
type: string
description: The unique ID that identifies the bill for a particular guest's stay. This value can be assigned by a hotel or automatically by lodging apps.
ExtraCharges:
type: object
x-intuit-type: Array of strings
description: "Indicates if the current charge contains one or more additional charges. \n\nThis field is only relevant for lodging apps. It indicates the types of extra charges billed to the customer. They usually apply after a customer checks out. \n\nValid values: GiftShop\nLaundry\nMinibar\nRestaurant\nTelephone\nOther"
CheckOutDate:
type: string
format: date
description: "The date of actual or anticipated check-out, depending on the transaction type.\n\nThe check-out date must always be later than the check-in date. The date format is dates is CCCC-MM-DD where: CCCC: The four-digit year\nMM: The two digit month\nDD: The Two digit day\n For example: June 5, 2019 is represented as 2019-06-05."
TotalAuthAmount:
type: number
description: 'The total amount authorized by the card issuer for the current credit card and the current FolioID.
It refers to the total amount authorized for the particular card and folio and includes tax and other applicable charges. Apps are responsible for keeping a running total of authorizations and submitting the correct amount in this field.'
IntuitFault:
type: object
properties:
Fault:
type: object
properties:
type:
type: string
enum:
- ValidationFault
- SystemFault
- AuthenticationFault
- AuthorizationFault
Error:
type: array
items:
type: object
properties:
code:
type: string
element:
type: string
Message:
type: string
Detail:
type: string
time:
type: string
format: date-time
echeckrefundrequest:
type: object
title: echeckrefundrequest
properties:
Amount:
type: object
x-intuit-type: number
description: 'The amount to be refunded. Valid values: Any value between 0.01 and 99999.99.'
x-intuit-required: Required
Description:
type: string
description: A description of the refund.
x-intuit-required: Optional
Context:
allOf:
- $ref: '#/components/schemas/paymentcontext'
description: Additional info that will be stored with the transaction.
x-intuit-required: Optional
required:
- Amount
deviceinfo:
type: object
title: deviceinfo
properties:
MacAddress:
type: string
description: The device's media access control (MAC) address.
x-intuit-required: Optional
Encrypted:
type: boolean
description: The device's encryption status.
x-intuit-required: Optional
IpAddress:
type: string
description: The device's IP address.
x-intuit-required: Optional
Longitude:
type: string
description: The device's longitude coordinates.
x-intuit-required: Optional
PhoneNumber:
type: string
description: The device's phone number (if available).
x-intuit-required: Optional
Latitude:
type: string
description: The device's latitude coordinates.
x-intuit-required: Optional
Type:
type: string
description: The type of device.
x-intuit-required: Optional
Id:
type: string
description: The device's ID.
x-intuit-required: Conditionally required
paymentcontext:
type: object
title: paymentcontext
properties:
Restaurant:
allOf:
- $ref: '#/components/schemas/restaurant'
description: For restaurant transactions, provides details about the restaurant.
Mobile:
type: boolean
description: "Flag that indicates if the charge was made from a mobile device.\n\n The card can be keyed, swiped, dipped or tapped on the merchant's POS device."
x-intuit-required: Required
x-intuit-default: false
Tax:
type: number
description: The sales tax required for commercial card processing.
x-intuit-required: Optional
IsEcommerce:
type: boolean
description: Flag that indicates if the charge is an eCommerce transaction made over the web.
x-intuit-required: Required
x-intuit-default: false
DeviceInfo:
allOf:
- $ref: '#/components/schemas/deviceinfo'
description: Provides info about the device used to swipe or take payments.
x-intuit-required: Optional
Lodging:
allOf:
- $ref: '#/components/schemas/lodging'
description: For lodging transactions, provides details about the lodging.
Recurring:
type: boolean
description: 'This is set to true if the charge is recurring. Note: This value ignored for capture and refund requests.'
x-intuit-required: Optional
x-intuit-default: false
required:
- IsEcommerce
- Mobile
echeckresponse:
type: object
title: echeckresponse
properties:
Status:
type: object
x-intuit-type: ECheckStatus
description: "The current status of the check. Learn more about check states.\n\nValid values types:PENDING: The check is being processed.\nSUCCEEDED: The check was funded and the transaction is complete.\nDECLINED: The check was rejected.\n VOIDED: The check was voided.\nREFUNDED: The check was refunded."
BankAccount:
allOf:
- $ref: '#/components/schemas/bankaccount'
description: "Specify or create the bank account associated with this transaction. \n\nRequired if the token or bankAccountOnFile aren't specified.\n\nReview the bankAccount entity for field details."
x-intuit-required: Conditionally required
Description:
type: string
description: Additional details about the eCheck and transaction.
x-intuit-required: Optional
Created:
type: string
description: The time the object was originally created. In ISO 8601 date-time format. It appears as YYYY-MM-DDTHH:MM:SSZ.
CheckNumber:
type: string
description: "The number of the eCheck associated with the transaction. \n\nThis number must be unique. Using the same checkNumber to create multiple eChecks will result in declines."
x-intuit-required: Optional
AuthCode:
type: string
description: The authorization code for the echeck.
x-intuit-required: Optional
PaymentMode:
type: object
x-intuit-type: PaymentModeType
description: 'The payment mode. This is also known as the SEC Code.
Valid values:WEB: Internet-initiated entry mode used for internet transactions.'
x-intuit-required: Required
Token:
type: string
description: 'The opaque container for the credit or debit card account associated with the transaction.
Required if the bankAccount or bankAccountOnFile aren''t specified. Learn more about creating tokens.'
x-intuit-required: Conditionally Required
BankAccountOnFile:
type: string
description: 'An existing bank account that was previously stored.
Specify the ID of the existing bank account. Required if the token or bankAccount aren''t specified.'
x-intuit-required: Conditionally Required
Amount:
type: number
description: 'The eCheck amount.
Valid values: Any value between 0.01 and 99999.99.'
x-intuit-required: Required
Context:
allOf:
- $ref: '#/components/schemas/checkcontext'
description: Additional info stored with the transaction.
x-intuit-required: Optional
Id:
type: string
description: The unique identifier for the eCheck.
x-intuit-required: Conditionally required
required:
- Amount
- PaymentMode
responses:
Fault:
description: Error. The body carries a Fault element (type ValidationFault, SystemFault, AuthenticationFault or AuthorizationFault) with one or more Error entries (code, element, Message, Detail).
content:
application/json:
schema:
$ref: '#/components/schemas/IntuitFault'
Throttled:
description: 'HTTP 429: the request was throttled. Wait 60 seconds before retrying.'
content:
application/json:
schema:
$ref: '#/components/schemas/IntuitFault'
securitySchemes:
oauth2:
type: oauth2
description: 'Intuit OAuth 2.0 (authorization code). Discovery: https://developer.api.intuit.com/.well-known/openid_configuration'
flows:
authorizationCode:
authorizationUrl: https://appcenter.intuit.com/connect/oauth2
tokenUrl: https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
refreshUrl: https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
scopes:
com.intuit.quickbooks.accounting: Grants access to the QuickBooks Online Accounting API, which focuses on accounting data.
com.intuit.quickbooks.payment: Grants access to the QuickBooks Payments API, which focuses on payments processing.
openid: Grants access to OpenID Connect features.
profile: User's given and family names info
email: User's email address
phone: User's phone number
address: User's physical address
x-generated-from: documentation
x-provenance:
method: generated
generated: '2026-11-05'
source: https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/charges
note: Converted from the JSON the developer.intuit.com API Explorer loads (static.developer.intuit.com/JSONObjects). Intuit publishes no OpenAPI document; this is a faithful machine transformation of its own reference data, graded as generated.