Consumer Endpoints
Tap2Local
>
Consumer Endpoints
Overview
Consumer-facing endpoints for the Tap2Local service (formerly Merchant Acquisition), enabling merchants to manage their payment acceptance, enrollment, revenue tracking, and customer interactions.
Features
This API provides endpoints for:
- Revenue & Activity - Track current revenue, maintained balances, and view transfer activity with filtering
- Checkouts & Payment Links - Create, manage, and share payment links with QR codes and notifications
- Disputes - Handle chargebacks, submit evidence (text and file-based), and manage dispute lifecycle
- Enrollment - Complete merchant onboarding including business details, representatives, and settlement accounts
- Bank Accounts & Settlement - Manage linked bank accounts and configure settlement preferences
- Branding & Customer Support - Customize merchant branding, avatars, and customer support details
- Products - Create and manage product catalogs with images and pricing
- Tap to Pay - Configure terminal settings and process contactless payments for iOS and Android
- Statements & Receipts - Access statements and send email receipts for transactions
- Representatives - Add, update, and remove business representatives during enrollment
API Reference
openapi: "3.0.0"
info:
version: 1.0.0
title: Merchant Acquisition
servers:
- url: 'https://{API_ENVIRONMENT}/a/consumer/api'
variables:
API_ENVIRONMENT:
default: devbank.banno-development.com
description: FI specific hostname
paths:
/v0/users/{userId}/merchant-acquisition/currentRevenue:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: Get the user's current Revenue and maintained daily balance
tags:
- Revenue
responses:
'200':
description: The user's current Revenue and maintained daily balance
content:
application/json:
schema:
$ref: '#/components/schemas/UserRevenueResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/activity:
parameters:
- $ref: '#/components/parameters/userId'
- in: query
name: limit
schema:
type: integer
required: false
- in: query
name: offset
schema:
type: integer
required: false
- in: query
name: filter
schema:
type: string
enum: [ refunded, canceled, disputed, failed ]
required: false
- in: query
name: customerId
description: Unique identifier of a customer
schema:
type: string
required: false
- in: query
name: transferIds
description: Comma separated list of transferIds
schema:
type: string
required: false
get:
summary: Paged endpoint of user's transfer activity.
tags:
- Activity
responses:
'200':
description: List of transfers. If the size of the list is less than what was requested, it is the end of the activity list. The only valid transfer combinations currently are `From Wallet to BankAccount`, `From Card to Wallet` or `From Bank Account to Wallet`. This means for `fromWallet` transfers you will never get a `card` object, and `toWallet` you could get either a `bankAccount` or `card` but never both. For forwards compatibility, consumers should expect to get neither `bankAccount` or `card` in the case that a new payment method was added.
content:
application/json:
schema:
$ref: '#/components/schemas/UserActivityResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/activity/{transferId}:
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/transferId'
get:
summary: Get transfer activity.
tags:
- Activity
responses:
'200':
description: MoovTransfer item for the id.
content:
application/json:
schema:
$ref: '#/components/schemas/MoovTransfer'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/activity/batch:
parameters:
- $ref: '#/components/parameters/userId'
- in: query
name: transferIds
description: Comma separated list of transferIds
schema:
type: string
required: false
get:
summary: Non-paged endpoint of user's transfer activity for the given list of transfer ids.
tags:
- Activity
responses:
'200':
description: List of transfers.
content:
application/json:
schema:
$ref: '#/components/schemas/UserActivityResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/activity/{transferId}/reversals:
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/transferId'
post:
summary: Refund a transfer.
tags:
- Activity
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ReversalRequest'
responses:
'200':
description: The refreshed transfer item.
content:
application/json:
schema:
$ref: '#/components/schemas/MoovTransfer'
'204':
description: No content (the reversal was successful, the refresh of the transfer failed)
'400':
description: Bad Request (validation error)
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/activity/{transferId}/disputes:
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/transferId'
get:
summary: Disputes for a given transfer.
tags:
- Dispute
responses:
'200':
description: A non-paged list of both active and completed disputes for the given transfer.
content:
application/json:
schema:
$ref: '#/components/schemas/DisputeListResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/checkouts:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: Get all checkouts for a user
tags:
- Checkouts
responses:
'200':
description: List of checkouts
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CheckoutListResponse'
'500':
description: Internal server error (something went wrong in the server side)
post:
summary: Create checkout.
tags:
- Checkouts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CheckoutCreateRequest'
responses:
'200':
description: The new Checkout
content:
application/json:
schema:
$ref: '#/components/schemas/Checkout'
'400':
description: Bad Request (validation error)
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/checkouts/{checkoutId}:
parameters:
- $ref: '#/components/parameters/userId'
- name: checkoutId
in: path
description: Unique identifier of the checkout
required: true
schema:
type: string
format: uuid
get:
summary: Get a checkout by id
tags:
- Checkouts
responses:
'200':
description: The checkout
content:
application/json:
schema:
$ref: '#/components/schemas/Checkout'
'500':
description: Internal server error (something went wrong in the server side)
delete:
summary: Delete a checkout by id
tags:
- Checkouts
responses:
'200':
description: The refreshed checkout item.
content:
application/json:
schema:
$ref: '#/components/schemas/Checkout'
'204':
description: No content (the delete was successful, the refresh of the checkout failed)
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/checkouts/{checkoutId}/qrcode:
get:
summary: Get Checkout QR Code
tags:
- Checkouts
description: Returns a checkout/payment-link QR Code for the associated Moov userId and checkout code.
parameters:
- $ref: '#/components/parameters/userId'
- name: checkoutId
in: path
required: true
schema:
type: string
description: The id of the checkout.
responses:
'200':
description: A QR code image in PNG format.
content:
image/png:
schema:
type: string
format: binary
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/checkouts/{checkoutId}/notification:
parameters:
- $ref: '#/components/parameters/userId'
- name: checkoutId
in: path
description: Unique identifier of the checkout
required: true
schema:
type: string
format: uuid
post:
summary: Send email or sms of payment the link.
tags:
- Checkouts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CheckoutNotificationRequest'
responses:
'204':
description: No content
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/disputes/{disputeId}/evidence:
get:
summary: Get all evidence on a dispute
tags:
- Dispute
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
responses:
'200':
description: The dispute evidence
content:
application/json:
schema:
$ref: '#/components/schemas/EvidenceListResponse'
'400':
description: Bad Request (validation error)
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/disputes/{disputeId}/evidence/{evidenceId}/data:
get:
summary: Get data on an evidence
tags:
- Dispute
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
- $ref: '#/components/parameters/evidenceId'
responses:
'200':
description: The evidence data. Content type can be represented as application/pdf, image/jpg, image/png, or image/tiff.
content:
image/*:
schema:
type: string
format: binary
'404':
description: Request received, but resource was not found
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/disputes/{disputeId}/evidence-text:
post:
summary: Create a text based evidence
tags:
- Dispute
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EvidenceNoteRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Evidence'
'404':
description: Request received, but resource was not found
'500':
description: Internal Server Error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/disputes/{disputeId}/evidence-file:
post:
summary: Create a file based evidence
tags:
- Dispute
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
requestBody:
content:
multipart/form-data: { }
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Evidence'
'404':
description: Request received, but resource was not found
'500':
description: Internal Server Error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/disputes/{disputeId}/evidence/{evidenceId}:
patch:
summary: Update evidence
tags:
- Dispute
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
- $ref: '#/components/parameters/evidenceId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EditEvidenceRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Evidence'
'400':
description: Bad Request
'404':
description: Not Found
'500':
description: Internal Server Error (something went wrong in the server side)
delete:
summary: Delete evidence
tags:
- Dispute
description: Delete a single evidence record
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
- $ref: '#/components/parameters/evidenceId'
responses:
'204':
description: Success - No Content. The API has successfully deleted the evidence.
'404':
description: Not Found
/v0/users/{userId}/merchant-acquisition/disputes:
parameters:
- $ref: '#/components/parameters/userId'
- in: query
name: limit
schema:
type: integer
required: false
- in: query
name: offset
schema:
type: integer
required: false
- in: query
name: filter
schema:
type: string
enum: [ active, completed ]
required: false
get:
summary: Paged endpoint of user's disputes.
tags:
- Dispute
responses:
'200':
description: List of disputes. If the size of the list is less than what was requested, it is the end of the disputes list. The `filter=active` query parameter will return disputes with a status of `response-needed` and `under-review`. The `filter=completed` query parameter will return disputes with a status of `resolved`, `accepted`, `closed`, `won`, `lost`, or `expired`.
content:
application/json:
schema:
$ref: '#/components/schemas/DisputeListResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/disputes/{disputeId}:
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
get:
summary: The user's dispute.
tags:
- Dispute
responses:
'200':
description: The details of the dispute
content:
application/json:
schema:
$ref: '#/components/schemas/Dispute'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/disputes/{disputeId}/accept:
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
post:
summary: Accept the dispute.
tags:
- Dispute
responses:
'200':
description: The details of the dispute
content:
application/json:
schema:
$ref: '#/components/schemas/Dispute'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/disputes/{disputeId}/submit:
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/disputeId'
post:
summary: Submit the evidence for a dispute.
tags:
- Dispute
responses:
'200':
description: The details of the dispute
content:
application/json:
schema:
$ref: '#/components/schemas/Dispute'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/bank-accounts:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: The user's bank accounts.
tags:
- Bank Accounts
responses:
'200':
description: The list of bank accounts for the user
content:
application/json:
schema:
$ref: '#/components/schemas/BankAccountsResponse'
'500':
description: Internal server error (something went wrong in the server side)
post:
summary: Updates the linked bank account
tags:
- Bank Accounts
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountRequest'
responses:
'204':
description: No Content
'500':
description: Internal Server Error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/branding:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: The branding for the account.
tags:
- Branding
responses:
'200':
description: The list of bank accounts for the user
content:
application/json:
schema:
$ref: '#/components/schemas/Brand'
'500':
description: Internal server error (something went wrong in the server side)
put:
summary: Update the branding for the account.
tags:
- Branding
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Brand'
responses:
'204':
description: No Content
'500':
description: Internal Server Error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/avatar:
get:
summary: Get the avatar
tags:
- FormShortening
description: Returns an avatar for the user or generates ones.
parameters:
- $ref: '#/components/parameters/userId'
- name: userId
in: path
required: true
schema:
type: string
description: The user id
responses:
'200':
description: An avatar image in JPEG format.
content:
image/jpeg:
schema:
type: string
format: binary
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/customer-support:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: The customer support details for the account.
tags:
- Customer Support
responses:
'200':
description: The customer support details for the account.
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerSupportResponse'
'500':
description: Internal server error (something went wrong in the server side)
patch:
summary: Updates the customer support details for the account.
tags:
- Customer Support
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerSupportRequest'
responses:
'200':
description: The customer support details for the account.
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerSupportResponse'
'500':
description: Internal Server Error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/settlement-account:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: The customer support details for the account.
tags:
- Bank Accounts
responses:
'200':
description: The customer support details for the account.
content:
application/json:
schema:
$ref: '#/components/schemas/BankAccount'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/account-info:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: Information about the merchant account.
tags:
- Account Info
responses:
'200':
description: Information about the merchant account.
content:
application/json:
schema:
$ref: '#/components/schemas/AccountInfoResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/status:
get:
summary: Get the user's enrollment status.
tags:
- Enrollment
description: Returns the user's enrollment status.
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: The merchant's enrollment status.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollmentStatusResponseV1'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/general-details:
post:
summary: Add the merchant's general details to their enrolling information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GeneralDetails'
responses:
'200':
description: Successfully added details. Returns the updated information.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollingInformation'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/transaction-and-card-details:
post:
summary: Add the merchant's transaction and card details to their enrolling information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionAndCardDetails'
responses:
'200':
description: Successfully added details. Returns the updated information.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollingInformation'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/fulfillment-details:
post:
summary: Add the merchant's filfillment details to their enrolling information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FulfillmentDetails'
responses:
'200':
description: Successfully added details. Returns the updated information.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollingInformation'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/settlement-account:
post:
summary: Selects the user's settlement account.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SettlementAccount'
responses:
'200':
description: Successfully added selected settlement account. Returns the updated information.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollingInformation'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/certify-representatives:
post:
summary: Certify that all necessary representatives have been added.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: Successfully certified representatives. Returns the updated information.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollingInformation'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/accept-fee-plan:
post:
summary: Accept the fee plan.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: Successfully accepted fee plan. Returns the updated information.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollingInformation'
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/initiate:
post:
summary: Initiates the merchant's enrollment
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'204':
description: Enrollment is initializing, poll the status endpoint to know when initialization is complete. The merchant's status will be `initializing` until it is `enrolling`.
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/information:
get:
summary: Get the merchant's enrollment information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: The current information of the merchant's enrollment.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollingInformation'
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/general-details:
post:
summary: Add the merchant's general details to their enrolling information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GeneralDetailsV1'
responses:
'204':
description: Successfully added details.
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/transaction-and-card-details:
post:
summary: Add the merchant's transaction and card details to their enrolling information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionAndCardDetails'
responses:
'204':
description: Successfully added details.
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/fulfillment-details:
post:
summary: Add the merchant's fulfillment details to their enrolling information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FulfillmentDetails'
responses:
'204':
description: Successfully added details.
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/settlement-account:
post:
summary: Selects the user's settlement account.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SettlementAccount'
responses:
'204':
description: Successfully added selected settlement account.
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/certify-representatives:
post:
summary: Certify that all necessary representatives have been added.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'204':
description: Successfully certified representatives.
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/accept-fee-plan:
post:
summary: Accept the fee plan.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'204':
description: Successfully accepted fee plan.
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/information:
get:
summary: Get the merchant's enrollment information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: The current information of the merchant's enrollment.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollingInformationV1'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/account:
get:
summary: Get the merchant's enrollment account information for the review screen.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: The enrollment account information.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollmentAccountResponse'
'500':
description: Internal server error (something went wrong in the server side)
post:
summary: Create or update the merchant's enrollment account information.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollmentAccountRequest'
responses:
'200':
description: Successfully saved enrollment account information.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollmentAccountResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/account/tax-id:
get:
summary: Get the merchant's business Tax ID (EIN).
description: Returns the actual tax ID value. Can be used when taxId is null on the enrollment account response.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: The merchant's tax ID.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrollmentAccountTaxIdResponse'
'404':
description: No tax ID found for this enrollment
'500':
description: Internal server error (something went wrong in the server side)
/v1/users/{userId}/merchant-acquisition/enrollment/finalize:
post:
summary: Finalizes the merchant's enrollment.
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'204':
description: Enrollment is successfully finalizing.
'500':
description: Internal server error (something went wrong in the server side)
'422':
description: Requirements still exist so the user cannot finalize
/v0/users/{userId}/merchant-acquisition/enrollment/sso:
get:
summary: Get SSO enrollment URL Link identifier for mobile clients
description: Returns a Link identifier for a Link that contains the URL that mobile clients can use to access web-based enrollment while maintaining the authenticated session
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: Successfully retrieved SSO enrollment URL Link identifier
content:
application/json:
schema:
$ref: '#/components/schemas/SSOResponse'
'500':
description: Internal server error (something went wrong in the server side)
'501':
description: SSO enrollment not yet implemented
/v0/users/{userId}/merchant-acquisition/representatives:
post:
summary: Add a representative to the merchant's business
tags:
- Representatives
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AddRepresentativeRequest'
responses:
'200':
description: Successfully added representative.
content:
application/json:
schema:
$ref: '#/components/schemas/Representative'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/representatives/{representativeId}:
delete:
summary: Remove a representative from the merchant's business
tags:
- Representatives
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/representativeId'
responses:
'204':
description: The representative was removed
'500':
description: Internal server error (something went wrong in the server side)
patch:
summary: Update a representative of the merchant's business
tags:
- Representatives
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/representativeId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateRepresentativeRequest'
responses:
'200':
description: The updated Representative
content:
application/json:
schema:
$ref: '#/components/schemas/Representative'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/industries:
get:
summary: Lists all industries a merchant's business could be categorized as
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: Returns the industries a mechant can choose from
content:
application/json:
schema:
$ref: '#/components/schemas/GetIndustriesResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/enrollment/fee-plan:
get:
summary: Returns the Jack Henry partner account fee plan
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: Returns the fee plan
content:
application/json:
schema:
$ref: '#/components/schemas/FeePlanResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/fee-plan:
get:
summary: Returns the merchant's fee plan
tags:
- Enrollment
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: Returns the fee plan
content:
application/json:
schema:
$ref: '#/components/schemas/FeePlanResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/tap-to-pay/terminal-configuration/android:
get:
tags:
- Tap to Pay
description: Returns an Android terminal configuration.
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: Terminal configuration for the user.
content:
application/json:
schema:
$ref: '#/components/schemas/TerminalConfiguration'
'404':
description: Terminal application does not exist or is not associated with merchant account
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/tap-to-pay/terminal-configuration/ios:
get:
tags:
- Tap to Pay
description: Returns an iOS terminal configuration.
parameters:
- $ref: '#/components/parameters/userId'
responses:
'200':
description: Terminal configuration for the user.
content:
application/json:
schema:
$ref: '#/components/schemas/TerminalConfiguration'
'404':
description: Terminal application does not exist or is not associated with merchant account
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/tap-to-pay/payment:
post:
tags:
- Tap to Pay
description: Create Tap to Pay payment with provided token.
parameters:
- $ref: '#/components/parameters/userId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TapToPayPayment'
responses:
'200':
description: Created transfer.
content:
application/json:
schema:
$ref: '#/components/schemas/MoovTransfer'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/activity/{transferId}/receipt:
parameters:
- $ref: '#/components/parameters/userId'
- name: transferId
in: path
description: Unique identifier of the moov transfer
required: true
schema:
type: string
format: uuid
post:
summary: Send an email receipt for the given transfer.
tags:
- Activity
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SendReceiptRequest'
responses:
'204':
description: No content
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/sweep/{sweepId}:
parameters:
- $ref: '#/components/parameters/userId'
- name: sweepId
in: path
description: Unique identifier of the sweep
required: true
schema:
type: string
format: uuid
get:
summary: Get the sweep details for the given sweepId
tags:
- Sweep
responses:
'200':
description: The sweep details.
content:
application/json:
schema:
$ref: '#/components/schemas/SweepDetails'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/statements/{statementId}:
parameters:
- $ref: '#/components/parameters/userId'
- name: statementId
in: path
description: Unique identifier of the statement
required: true
schema:
type: string
format: uuid
get:
summary: Get the statement for the given statementId
tags:
- Statements
responses:
'200':
description: The statement as a pdf.
content:
application/pdf:
schema:
type: string
format: binary
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/products:
parameters:
- $ref: '#/components/parameters/userId'
post:
summary: Create a new product for the merchant account.
tags:
- Products
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductCreateRequest'
responses:
'200':
description: The created product
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
'400':
description: Bad Request (validation error)
'500':
description: Internal server error (something went wrong in the server side)
get:
summary: Listing endpoint for merchant's products.
tags:
- Products
responses:
'200':
description: List of all products for this merchant.
content:
application/json:
schema:
$ref: '#/components/schemas/GetProductsResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/products/{productId}:
delete:
summary: Remove a product from the merchant's product catalog.
tags:
- Products
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/productId'
responses:
'204':
description: The product was removed.
'500':
description: Internal server error (something went wrong in the server side)
patch:
summary: Update a product within the merchant's product catalog.
tags:
- Products
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/productId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateProductRequest'
responses:
'200':
description: The updated product.
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/product-image:
parameters:
- $ref: '#/components/parameters/userId'
post:
summary: Upload an image for a product.
tags:
- Products
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
image:
type: string
format: binary
description: The image file to upload
required:
- image
responses:
'200':
description: The uploaded image information
content:
application/json:
schema:
$ref: '#/components/schemas/ProductImage'
'400':
description: Bad Request (validation error)
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/statements:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: Listing endpoint for merchant's statements.
tags:
- Statements
responses:
'200':
description: List of all statements for this merchant.
content:
application/json:
schema:
$ref: '#/components/schemas/GetStatementsResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/customers/{customerId}/avatar:
get:
summary: Get the avatar
tags:
- Customers
description: Returns an avatar for the customer or generates ones.
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/customerId'
responses:
'200':
description: An avatar image in JPEG format.
content:
image/jpeg:
schema:
type: string
format: binary
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/customers:
parameters:
- $ref: '#/components/parameters/userId'
post:
summary: Create a new customer for the merchant account.
tags:
- Customers
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerCreateRequest'
responses:
'200':
description: The created customer
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
'400':
description: Bad Request (validation error)
'500':
description: Internal server error (something went wrong in the server side)
get:
summary: Listing endpoint for merchant's customers.
tags:
- Customers
responses:
'200':
description: List of all customers for this merchant.
content:
application/json:
schema:
$ref: '#/components/schemas/GetCustomersResponse'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/customers/{customerId}:
delete:
summary: Delete a customer.
tags:
- Customers
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/customerId'
responses:
'204':
description: The customer was removed.
'500':
description: Internal server error (something went wrong in the server side)
patch:
summary: Update a customer.
tags:
- Customers
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/customerId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCustomerRequest'
responses:
'200':
description: The updated customer.
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
'500':
description: Internal server error (something went wrong in the server side)
get:
summary: Get a customer by id.
tags:
- Customers
parameters:
- $ref: '#/components/parameters/userId'
- $ref: '#/components/parameters/customerId'
responses:
'200':
description: The customer.
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/invoices:
parameters:
- $ref: '#/components/parameters/userId'
get:
summary: Listing endpoint for merchant's invoices.
tags:
- Invoices
responses:
'200':
description: List of all invoices for this merchant.
content:
application/json:
schema:
$ref: '#/components/schemas/GetInvoicesResponse'
'500':
description: Internal server error (something went wrong in the server side)
post:
summary: Create an invoice
tags:
- Invoices
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateInvoiceRequest'
responses:
'200':
description: The created Invoice
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/invoices/{invoiceId}:
parameters:
- $ref: '#/components/parameters/userId'
- name: invoiceId
in: path
description: Unique identifier of the invoice
required: true
schema:
type: string
format: uuid
get:
summary: Get the specific invoice
tags:
- Invoices
responses:
'200':
description: The requested Invoice
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
'404':
description: The Invoice was not found
'500':
description: Internal server error (something went wrong in the server side)
patch:
summary: Edit an invoice. The Invoice is automatically sent to the customer when the draft is updated to `unpaid` status.
tags:
- Invoices
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EditInvoiceRequest'
responses:
'200':
description: The updated Invoice
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
'404':
description: The Invoice was not found
'500':
description: Internal server error (something went wrong in the server side)
delete:
summary: Delete an invoice
tags:
- Invoices
responses:
'204':
description: The Invoice was deleted.
'404':
description: The Invoice was not found
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/invoices/{invoiceId}/send:
parameters:
- $ref: '#/components/parameters/userId'
- name: invoiceId
in: path
description: Unique identifier of the invoice
required: true
schema:
type: string
format: uuid
post:
summary: Send an invoice
tags:
- Invoices
responses:
'200':
description: The sent invoice
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
'404':
description: The Invoice was not found
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/invoices/{invoiceId}/cancel:
parameters:
- $ref: '#/components/parameters/userId'
- name: invoiceId
in: path
description: Unique identifier of the invoice
required: true
schema:
type: string
format: uuid
post:
summary: Cancel an invoice
tags:
- Invoices
responses:
'200':
description: The canceled invoice
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
'404':
description: The Invoice was not found
'500':
description: Internal server error (something went wrong in the server side)
/v0/users/{userId}/merchant-acquisition/invoices/{invoiceId}/mark-as-paid:
parameters:
- $ref: '#/components/parameters/userId'
- name: invoiceId
in: path
description: Unique identifier of the invoice
required: true
schema:
type: string
format: uuid
post:
summary: Mark this invoice as paid
tags:
- Invoices
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MarkInvoiceAsPaidRequest'
responses:
'200':
description: The updated Invoice
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
'404':
description: The Invoice was not found
'500':
description: Internal server error (something went wrong in the server side)
components:
parameters:
userId:
name: userId
in: path
description: Unique identifier of the user
required: true
schema:
type: string
format: uuid
transferId:
name: transferId
in: path
description: Unique identifier of the transfer
required: true
schema:
type: string
format: uuid
disputeId:
name: disputeId
in: path
description: Unique identifier of the dispute
required: true
schema:
type: string
format: uuid
evidenceId:
name: evidenceId
in: path
description: Unique identifier of the evidence
required: true
schema:
type: string
format: uuid
representativeId:
name: representativeId
in: path
description: Unique identifier of the representative
required: true
schema:
type: string
format: uuid
productId:
name: productId
in: path
description: Unique identifier of the product
required: true
schema:
type: string
format: uuid
customerId:
name: customerId
in: path
description: Unique identifier of the customer
required: true
schema:
type: string
format: uuid
schemas:
UserRevenueResponse:
required:
- currentBalance
- maintainedDailyBalance
- payments
type: object
properties:
currentBalance:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "10000.00"
maintainedDailyBalance:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "0.00"
payments:
type: integer
nullable: false
description: The number of payments received.
example: "25"
UserActivityResponse:
required:
- transfers
type: object
properties:
transfers:
nullable: false
type: array
items:
allOf:
- $ref: '#/components/schemas/MoovTransfer'
CheckoutCreateRequest:
required:
- amount
type: object
properties:
amount:
type: string
nullable: false
description: The amount
example: "1099.99"
callToAction:
type: string
nullable: true
description: The call to action used on the checkout.
example: "Pay"
title:
type: string
nullable: true
description: Title of the checkout
example: "Payment for services"
description:
type: string
nullable: true
description: Description of the checkout
example: "Payment for services"
maxUses:
type: integer
nullable: true
description: Maximum number of times the checkout can be used. Use `null` to specify unlimited uses.
example: 1
expiresOn:
type: string
format: dateTime
nullable: true
description: The dateTime on which the checkout will expire. Use `null` to specify no expiration.
example: "2024-10-04T05:00:00.000Z"
lineItems:
type: array
nullable: true
description: Optional array of line items associated with this checkout
items:
$ref: '#/components/schemas/LineItem'
salesTaxAmount:
type: string
nullable: true
description: The sales tax amount represented as a String following the Consumer Api Guidelines. Required when lineItems are provided.
example: "2.50"
CheckoutListResponse:
required:
- checkouts
type: object
properties:
checkouts:
type: array
items:
allOf:
- $ref: '#/components/schemas/Checkout'
ReversalRequest:
type: object
properties:
amount:
type: string
nullable: true
description: The amount
example: "1099.99"
CheckoutNotificationRequest:
required:
- notificationType
- contact
type: object
properties:
notificationType:
type: string
nullable: false
enum: [ email, sms ]
contact:
type: string
nullable: true
description: Contanct info, email address or cell phone number
example: "example@example.com"
EvidenceListResponse:
required:
- evidence
type: object
properties:
evidence:
type: array
items:
allOf:
- $ref: '#/components/schemas/Evidence'
EditEvidenceRequest:
required:
- evidenceType
type: object
properties:
evidenceType:
$ref: '#/components/schemas/EvidenceType'
nullable: false
text:
type: string
nullable: true
description: The updated text describing the evidence
example: "This receipt shows evidence of an overpayment"
EvidenceNoteRequest:
required:
- evidenceType
- text
type: object
properties:
evidenceType:
$ref: '#/components/schemas/EvidenceType'
nullable: false
text:
type: string
nullable: false
description: The text describing the evidence
example: "This receipt shows evidence of an overpayment"
EvidenceFileRequest:
required:
- evidenceType
- file
type: object
properties:
evidenceType:
$ref: '#/components/schemas/EvidenceType'
nullable: false
description: The type of evidence
file:
type: string
nullable: false
description: The file of the evidence
example: "receipt.jpeg"
DisputeListResponse:
required:
- disputes
type: object
properties:
disputes:
type: array
items:
$ref: '#/components/schemas/Dispute'
BankAccountsResponse:
required:
- bankAccounts
type: object
properties:
bankAccounts:
type: array
nullable: false
items:
$ref: '#/components/schemas/BankAccount'
Brand:
required:
- lightAccent
- darkAccent
type: object
properties:
darkAccent:
type: string
nullable: false
example: "#ffffff"
description: A CSS hex color representing the accent color for use in dark mode.
lightAccent:
type: string
nullable: false
example: "#ffffff"
description: A CSS hex color representing the accent color for use in light mode.
Checkout:
required:
- id
- description
- title
- amount
- link
- callToAction
- expiresOn
- createdOn
- deletedOn
- uses
- maxUses
- status
type: object
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this checkout
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
amount:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "1099.99"
description:
type: string
nullable: false
description: Description of the checkout
example: "Payment for services"
title:
type: string
nullable: false
description: Title of the checkout
example: "Payment for services"
link:
type: string
nullable: false
description: URL to the hosted checkout page of this checkout.
example: "https://moov.money/c/928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
callToAction:
type: string
nullable: false
description: Call to action for the checkout
example: "Pay now"
expiresOn:
type: string
format: dateTime
nullable: true
description: The dateTime on which the checkout expires.
example: "2024-10-04T05:00:00.000Z"
createdOn:
type: string
format: dateTime
nullable: false
description: The time the checkout expires.
example: "2024-10-04T05:00:00.000Z"
deletedOn:
type: string
format: dateTime
nullable: true
description: The dateTime on which the checkout was deleted.
example: "2024-10-04T05:00:00.000Z"
uses:
type: integer
nullable: false
description: The number of times the checkout has been used.
example: 10
maxUses:
type: integer
nullable: true
description: The max number of times this checkout can be used. `null` means this checkout has no limit on uses. Either null or non-zero positive integer.
example: 100
status:
type: string
enum: [ active, used, expired, disabled ]
nullable: false
description: The status of the checkout. `active` means the checkout is not expired and has not reached it's use limit. `used` means this checkout has reached it's use limit. `expired` means this checkout has reached it's expiration. `disabled` means this checkout can no longer be used.
example: active
MoovTransfer:
required:
- id
- amount
- createdOn
- refundedAmount
- refundableAmount
- status
- refunds
- depositAmount
- fraudRisk
- moovWalletId
- moovFee
- direction
- moovAccount
- card
- bankAccount
- disputedAmount
- failureReason
- paymentLinkId
- cardPaymentReceivedFrom
- description
- sweepId
- invoiceId
type: object
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this transfer
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
amount:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "1099.99"
moovFee:
type: string
nullable: true
description: The amount represented as a String following the Consumer Api Guidelines. Either null or a non empty string.
example: "1.99"
refundedAmount:
type: string
nullable: true
description: The amount represented as a String following the Consumer Api Guidelines. Either null or a non empty string.
example: "300.00"
refundableAmount:
type: string
nullable: true
description: The amount represented as a String following the Consumer Api Guidelines.
example: "300.00"
refunds:
type: array
nullable: false
items:
$ref: "#/components/schemas/Refund"
status:
type: string
nullable: false
enum: [ created, pending, completed, failed, reversed, queued, canceled, initiated, confirmed, settled ]
createdOn:
type: string
format: dateTime
nullable: false
description: The time the transfer was created.
example: "2024-10-04T05:00:00.000Z"
depositAmount:
type: string
nullable: true
description: The amount represented as a String following the Consumer Api Guidelines.
example: "1098.00"
fraudRisk:
type: string
enum: [ low, high ]
nullable: false
moovWalletId:
type: string
format: uuid
nullable: false
description: Unique identifier for this Moov Wallet
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
direction:
type: string
nullable: false
enum: [ toWallet, fromWallet ]
moovAccount:
$ref: "#/components/schemas/MoovAccount"
card:
$ref: "#/components/schemas/Card"
bankAccount:
$ref: "#/components/schemas/BankAccount"
disputedAmount:
type: string
nullable: true
description: The amount represented as a String following the Consumer Api Guidelines.
example: "1098.00"
failureReason:
type: string
nullable: true
description: Reason for a transfer's failure.
example: "Processing error"
paymentLinkId:
type: string
nullable: true
description: If the payment was accepted through a payment link, this is the unique ID for that payment link.
example: "512928e3-6765-4ea0-a3b8-6bb5c8f7e7e0"
cardPaymentReceivedFrom:
type: string
nullable: true
enum: [ contactlessPayment, paymentLink ]
description:
type: string
nullable: true
description: The description of the payment that was entered when it was accepted.
example: "Studio rental"
sweepId:
type: string
nullable: true
description: If the transfer is a sweep, this id will be non null.
example: "512928e3-6765-4ea0-a3b8-6bb5c8f7e7e0"
invoiceId:
type: string
nullable: true
description: The id for an invoice if the payment has an associated invoice.
example: "512928e3-6765-4ea0-a3b8-6bb5c8f7e7e0"
SweepDetails:
type: object
required:
- id
- totalAccruedAmount
- accrualStartedOn
- accrualEndedOn
- subtotals
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this sweep
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
totalAccruedAmount:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "100.00"
accrualStartedOn:
type: string
format: date-time
nullable: false
description: The datetime this sweep started accruing.
accrualEndedOn:
type: string
format: date-time
nullable: false
description: The datetime this sweep stopped accruing.
subtotals:
type: array
nullable: false
items:
$ref: "#/components/schemas/Subtotal"
Subtotal:
type: object
required:
- type
- amount
- count
properties:
type:
type: string
nullable: false
enum: [ cardPayments, refunds, disputes, fees ]
amount:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "100.00"
count:
type: integer
nullable: false
description: The quantity of the type to produce the subtotal amount.
example: "25"
BankAccount:
type: object
nullable: true
required:
- id
- lastFourAccountNumber
- name
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this bank account
lastFourAccountNumber:
type: string
nullable: false
minLength: 4
maxLength: 4
description: The last four digits of the account number
name:
type: string
nullable: false
description: The display name for the account
example:
id: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
lastFourAccountNumber: "1234"
name: "Checking"
MoovAccount:
type: object
nullable: true
required:
- id
- displayName
- email
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this Moov user account
displayName:
type: string
nullable: false
description: The name to display for this Moov user account
email:
type: string
nullable: true
description: The email for this Moov user account. Either null or a non empty string.
example:
id: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
displayName: "First Last"
email: "first.last@email.com"
Card:
type: object
nullable: true
required:
- id
- brand
- lastFourDigits
- expiration
- country
- type
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this card
brand:
type: string
enum: [ American Express, Discover, Mastercard, Visa, Unknown ]
nullable: false
lastFourDigits:
type: string
minLength: 4
maxLength: 4
nullable: false
description: The last four digits of the card number.
expiration:
type: string
minLength: 5
maxLength: 5
nullable: false
description: The expiration date of the card, formatted as MM/YY
country:
type: string
nullable: false
description: The country the card was issued in.
type:
type: string
enum: [ debit, credit, prepaid, unknown ]
nullable: false
example:
id: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
brand: "Visa"
lastFourDigits: "4536"
expiration: "05/25"
country: "United States"
type: "credit"
Refund:
type: object
nullable: false
required:
- id
- amount
- status
- createdOn
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this refund
amount:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
status:
type: string
enum: [ created, pending, completed, failed ]
nullable: false
createdOn:
type: string
format: dateTime
nullable: false
description: The time the transfer was created.
example: "2024-10-04T05:00:00.000Z"
example:
- id: "8bb71a07f48ba1ba9438221313c79f23b091c171"
amount: "100.00"
status: "pending"
- id: "8bb71a07f48ba1ba9438221313c79f23b091c172"
amount: "200.00"
status: "pending"
Evidence:
type: object
nullable: false
required:
- id
- disputeId
- createdOn
- evidenceType
- fileName
- mimeType
- size
- text
- updatedOn
- type
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this evidence
disputeId:
type: string
format: uuid
nullable: false
description: Unique identifier for this evidence's dispute
createdOn:
type: string
format: dateTime
nullable: false
description: The time the evidence was created
example: "2024-10-04T05:00:00.000Z"
evidenceType:
$ref: '#/components/schemas/EvidenceType'
nullable: false
description: The category type of this evidence
fileName:
type: string
nullable: true
description: The file name of the data for this evidence
mimeType:
type: string
nullable: true
description: The mimeType of this evidence. Possible values [image/jpeg, image/tiff, application/pdf, text/plain]
size:
type: integer
nullable: true
description: The size in bytes of the evidence data
text:
type: string
nullable: true
description: The text description of this evidence. An optional property, only expected if the mimeType is txt
updatedOn:
type: string
format: dateTime
nullable: true
description: The time the evidence was updated
example: "2024-10-04T05:00:00.000Z"
type:
type: string
enum: [ note, file ]
nullable: false
example: "note"
description: The type of evidence represented as a note or file. When `note`, the `text` field will be non null, but `fileName`, `size` and `mimeType` will be null. When `file`, `fileName`, `size` and `mimeType` will be non null but `text` will be null.
EvidenceType:
type: string
enum:
- receipt
- proofOfDelivery
- cancelationPolicy
- termsOfService
- customerCommunication
- genericEvidence
- coverLetter
- other
Dispute:
type: object
nullable: false
required:
- id
- phase
- status
- createdOn
- respondBy
- reasonCode
- reasonDescription
- amount
- transferId
properties:
id:
type: string
format: uuid
nullable: false
description: The unique identifier for this dispute.
phase:
type: string
enum: [ preDispute, chargeback, inquiry, unknown ]
nullable: false
example: "inquiry"
description: The current phase of the dispute.
status:
type: string
enum: [ resolved, responseNeeded, underReview, accepted, closed, won, lost, expired ]
nullable: false
description: The current status of the dispute.
createdOn:
type: string
format: date-time
nullable: false
description: The datetime the dispute was created.
respondBy:
type: string
format: date-time
nullable: true
description: The datetime by which the dispute must be responded to.
reasonCode:
type: string
nullable: false
description: The card network’s category for the dispute.
example: "P92"
reasonDescription:
type: string
nullable: false
description: Card network categorization details of the dispute.
example: "Inquiry expired without a response"
amount:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "100.00"
transferId:
type: string
format: uuid
nullable: false
description: The unique identifier of the MoovTransfer associated with the dispute.
TerminalConfiguration:
type: object
nullable: false
required:
- configuration
properties:
configuration:
type: string
nullable: false
description: Base64 encoded terminal configuration
TapToPayPayment:
type: object
nullable: false
required:
- paymentMethodToken
- amount
- description
- lineItems
- salesTaxAmount
properties:
paymentMethodToken:
type: string
nullable: false
description: Token for creating MoovTransfer from tap authorization.
amount:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "100.00"
description:
type: string
nullable: false
description: Description of the transaction
example: "Payment for services"
lineItems:
type: array
nullable: false
description: Line items for this payment. Can be empty.
items:
$ref: '#/components/schemas/LineItem'
salesTaxAmount:
type: string
nullable: true
description: The sales tax amount represented as a String following the Consumer Api Guidelines. Required when lineItems are provided.
example: "2.50"
Address:
required:
- addressLine1
- addressLine2
- city
- postalCode
- stateOrProvince
type: object
properties:
addressLine1:
type: string
nullable: false
example: ""
description: "Customer details address. should be less than 60 characters."
minLength: 1
maxLength: 60
addressLine2:
type: string
nullable: true
example: ""
description: "Customer details address. Should be less than 60 characters."
city:
type: string
nullable: false
example: "dallas"
description: "Customer details phone number city. Should be less or equal than 32 characters."
minLength: 1
maxLength: 32
postalCode:
type: string
nullable: false
example: "75254"
description: "Customer details phone number postalCode. Should be less or equal than 5 characters."
minLength: 5
maxLength: 5
stateOrProvince:
type: string
nullable: false
example: "TX"
description: "Customer details phone number city. Should be less or equal than 2 characters."
minLength: 2
maxLength: 2
CustomerSupportRequest:
required:
- email
- website
- phone
- address
- statementDescriptor
type: object
properties:
email:
type: string
nullable: true
description: The customer support email.
example: "user@merchantWebsite.com"
website:
type: string
nullable: true
description: The customer support website url.
example: "merchantWebsite.com"
phone:
type: string
nullable: true
description: The customer support phone.
example: "+1 888-762-8373"
address:
$ref: '#/components/schemas/Address'
nullable: true
description: The customer support address for the account.
statementDescriptor:
type: string
nullable: true
description: The merchant's purchase confirmation statement descriptor.
example: "Merchant Statment Descriptor"
CustomerSupportResponse:
required:
- email
- website
- phone
- address
- statementDescriptor
type: object
properties:
email:
type: string
nullable: true
description: The customer support email.
example: "user@merchantWebsite.com"
website:
type: string
nullable: true
description: The customer support website.
example: "merchantWebsite.com"
phone:
type: string
nullable: true
description: The customer support phone.
example: "+1 888-762-8373"
address:
$ref: '#/components/schemas/Address'
nullable: true
description: The customer support address for the account.
statementDescriptor:
type: string
nullable: true
description: The merchant's purchase confirmation statement descriptor.
example: "Merchant Statment Descriptor"
AccountRequest:
type: object
nullable: true
required:
- jhAccountID
properties:
jhAccountID:
type: string
nullable: false
description: The JHA Account ID to use.
AccountInfoResponse:
type: object
nullable: false
required:
- displayName
- website
- settlementAccount
properties:
displayName:
type: string
nullable: false
description: The name of the merchant's business
example: "Star Heating & Air"
website:
type: string
nullable: false
description: The website for the merchant's business
example: "www.starheating.com"
settlementAccount:
$ref: '#/components/schemas/BankAccount'
FeePlanResponse:
type: object
nullable: false
required:
- fees
properties:
fees:
nullable: false
type: array
items:
$ref: '#/components/schemas/Fee'
Fee:
type: object
nullable: false
required:
- title
- primaryFeeText
- secondaryFeeText
properties:
title:
type: string
nullable: false
example: "Online rates"
primaryFeeText:
type: string
nullable: false
example: "0.50% + 15¢"
secondaryFeeText:
type: string
nullable: true
example: "Plus Interchange+ fee +1.5% for international cards"
GetIndustriesResponse:
type: object
nullable: false
required:
- groups
properties:
groups:
nullable: false
type: array
items:
$ref: '#/components/schemas/IndustryGroup'
IndustryGroup:
type: object
nullable: false
required:
- groupName
- industries
properties:
groupName:
type: string
nullable: false
example: "Retail"
industries:
nullable: false
type: array
items:
$ref: '#/components/schemas/Industry'
Industry:
type: object
nullable: false
required:
- id
- name
properties:
id:
type: string
nullable: false
example: "IndustryId"
name:
type: string
nullable: false
example: "Automotive"
FinalizeEnrollmentResponse:
type: object
nullable: false
required:
- status
properties:
status:
type: string
nullable: false
enum: [ ineligible, pendingReview, enrolled ]
example: "enrolled"
EnrollmentStatusResponse:
type: object
nullable: false
required:
- status
- merchantName
description: "The merchant's enrollment status. If status is enrolled, merchantName will be non-null."
properties:
status:
type: string
nullable: false
enum: [ notEnrolled, initializing, ineligible, enrolling, pendingReview, enrolled, cannotEnroll, disabled ]
example: "enrolled"
merchantName:
nullable: true
type: string
example: "Star Heating & Plumbing"
EnrollmentStatusResponseV1:
type: object
nullable: false
required:
- status
- merchantName
description: "The merchant's enrollment status. If status is enrolled, merchantName will be non-null. V1 includes the pendingFinalization status."
properties:
status:
type: string
nullable: false
enum: [ notEnrolled, initializing, ineligible, enrolling, pendingReview, enrolled, cannotEnroll, disabled, pendingFinalization, errorsExist ]
example: "enrolled"
merchantName:
nullable: true
type: string
example: "Star Heating & Plumbing"
InitiateResponse:
type: object
nullable: false
required:
- status
description: "The result of initializing enrollment, or the current status if they've completed enrollment. If status is enrolling enrollingInformation will be non-null"
properties:
status:
type: string
nullable: false
enum: [ ineligible, enrolling, pendingReview, enrolled, cannotEnroll ]
example: "enrolled"
enrollingInformation:
$ref: '#/components/schemas/EnrollingInformation'
SSOResponse:
type: object
required:
- linkId
properties:
linkId:
type: string
nullable: false
description: The SSO URL Link identifier that mobile clients can use to get the Link information for web-based enrollment. The mobile clients can get the Link information from the endpoint documented [here](https://docs.banno.com/consumer-api/user/links/#/Links/getUserLink).
example: "8a976285-17cf-4ae2-b9ee-021c50e7ea6a"
EnrollingInformation:
type: object
nullable: false
description: Each field represents an enrollment step. If a field is null, that step is not necessary. If it is non-null, it contains the current information for that step.
required:
- generalDetails
- transactionAndCardDetails
- fulfillmentDetails
- settlementAccount
- declareRepresentatives
- feePlan
- errors
properties:
generalDetails:
$ref: '#/components/schemas/GeneralDetails'
transactionAndCardDetails:
$ref: '#/components/schemas/TransactionAndCardDetails'
fulfillmentDetails:
$ref: '#/components/schemas/FulfillmentDetails'
settlementAccount:
$ref: '#/components/schemas/SettlementAccount'
declareRepresentatives:
$ref: '#/components/schemas/DeclareRepresentatives'
feePlan:
$ref: '#/components/schemas/FeePlan'
errors:
type: array
nullable: false
items:
$ref: '#/components/schemas/EnrollmentError'
EnrollingInformationV1:
type: object
nullable: false
description: Each field represents an enrollment step. If a field is null, that step is not necessary. If it is non-null, it contains the current information for that step. V1 uses GeneralDetailsV1 which makes website optional and adds a required description field.
required:
- generalDetails
- transactionAndCardDetails
- fulfillmentDetails
- settlementAccount
- declareRepresentatives
- feePlan
- errors
properties:
generalDetails:
$ref: '#/components/schemas/GeneralDetailsV1'
transactionAndCardDetails:
$ref: '#/components/schemas/TransactionAndCardDetails'
fulfillmentDetails:
$ref: '#/components/schemas/FulfillmentDetails'
settlementAccount:
$ref: '#/components/schemas/SettlementAccount'
declareRepresentatives:
$ref: '#/components/schemas/DeclareRepresentatives'
feePlan:
$ref: '#/components/schemas/FeePlan'
errors:
type: array
nullable: false
items:
$ref: '#/components/schemas/EnrollmentError'
GeneralDetails:
type: object
required:
- industryId
- website
- monthlyVolumeRange
- geographicReach
- email
- businessType
properties:
industryId:
type: string
nullable: true
description: The Industry Id for the merchant
example: "IndustryId"
website:
type: string
nullable: true
example: "starheatingandair.com"
monthlyVolumeRange:
type: string
nullable: true
enum:
- underTenThousand
- tenThousandToFiftyThousand
- fiftyThousandToOneHundredThousand
- oneHundredThousandToTwoHundredAndFiftyThousand
- twoHundredAndFiftyThousandToFiveHundredThousand
- fiveHundredThousandToOneMillion
- oneMillionToFiveMillion
- overFiveMillion
description: The merchant's monthly maximum income estimate for their business.
example: "tenThousandToFiftyThousand"
geographicReach:
type: string
nullable: true
enum:
- usOnly
- usAndInternational
- internationalOnly
description: What regions the merchant will operate in
example: "usOnly"
email:
type: string
nullable: true
example: "starheatingandair@email.com"
businessType:
type: string
nullable: true
enum:
- soleProprietorship
- unincorporatedAssociation
- trust
- publicCorporation
- privateCorporation
- llc
- partnership
- unincorporatedNonProfit
- incorporatedNonProfit
- governmentEntity
description: Specifies the merchant's business type.
example: "soleProprietorship"
GeneralDetailsV1:
type: object
required:
- industryId
- description
- monthlyVolumeRange
- geographicReach
- email
- businessType
properties:
industryId:
type: string
nullable: true
description: The Industry Id for the merchant
example: "IndustryId"
description:
type: string
nullable: false
description: A description of the merchant's business
example: "We provide heating and air conditioning services to residential and commercial customers."
website:
type: string
nullable: true
example: "starheatingandair.com"
monthlyVolumeRange:
type: string
nullable: true
enum:
- underTenThousand
- tenThousandToFiftyThousand
- fiftyThousandToOneHundredThousand
- oneHundredThousandToTwoHundredAndFiftyThousand
- twoHundredAndFiftyThousandToFiveHundredThousand
- fiveHundredThousandToOneMillion
- oneMillionToFiveMillion
- overFiveMillion
description: The merchant's monthly maximum income estimate for their business.
example: "tenThousandToFiftyThousand"
geographicReach:
type: string
nullable: true
enum:
- usOnly
- usAndInternational
- internationalOnly
description: What regions the merchant will operate in
example: "usOnly"
email:
type: string
nullable: true
example: "starheatingandair@email.com"
businessType:
type: string
nullable: true
enum:
- soleProprietorship
- unincorporatedAssociation
- trust
- publicCorporation
- privateCorporation
- llc
- partnership
- unincorporatedNonProfit
- incorporatedNonProfit
- governmentEntity
description: Specifies the merchant's business type.
example: "soleProprietorship"
TransactionAndCardDetails:
type: object
required:
- businessPresence
- averageTransactionSize
- maximumTransactionSize
- businessTransactionPercentage
- consumerTransactionPercentage
- acceptsCards
- inPersonPercentage
- onlinePercentage
- litigationStatus
properties:
businessPresence:
type: string
nullable: true
enum:
- commercialOffice
- retailStorefront
- homeBased
- onlineOnly
- mobileBusiness
- mixedPresence
description: How the merchant's business primarily operates
example: "mobileBusiness"
averageTransactionSize:
type: string
nullable: true
description: The merchant's average transaction amount, represented as a String following the Consumer Api Guidelines
example: "1000.00"
maximumTransactionSize:
type: string
nullable: true
description: The merchant's maximum transaction amount, represented as a String following the Consumer Api Guidelines
example: "1000.00"
businessTransactionPercentage:
type: number
format: integer
minimum: 0
maximum: 100
nullable: true
description: Percentage of total transactions that are from businesses. This plus consumerTransactionPercentage must equal 100
example: 50
consumerTransactionPercentage:
type: number
format: integer
minimum: 0
maximum: 100
nullable: true
description: Percentage of total transactions that are from consumers. This plus businessTransactionPercentage must equal 100
example: 50
acceptsCards:
type: boolean
nullable: true
description: Does the merchant accept cards
example: true
inPersonPercentage:
type: number
format: integer
minimum: 0
maximum: 100
nullable: true
description: Percentage of total payments that are in person. This plus onlinePercentage must equal 100
example: 50
onlinePercentage:
type: number
format: integer
minimum: 0
maximum: 100
nullable: true
description: Percentage of total payments that are online. This plus inPersonPercentage must equal 100
example: 50
litigationStatus:
type: string
nullable: true
enum:
- none
- governmentEnforcementOrInvestigation
- fraudOrFinancialCrime
- consumerProtectionOrClassAction
- dataBreachOrPrivacy
- bankruptcyOrInsolvency
- employmentOrWorkplaceDisputes
- personalInjuryOrMedical
- intellectualProperty
- other
description: Specifies any pending or ongoing litigation for the merchant's business.
example: "none"
FulfillmentDetails:
type: object
required:
- fulfillmentMethod
- fulfillmentTimeline
- refundPolicy
properties:
fulfillmentMethod:
type: string
nullable: true
enum:
- shippedPhysicalGoods
- localPickupOrDelivery
- digitalContent
- inPersonService
- remoteService
- donation
- billOrDebtRepayment
- subscriptionOrMembership
- other
description: How the merchant fulfills orders
example: "shippedPhysicalGoods"
fulfillmentTimeline:
type: string
nullable: true
enum:
- immediate
- withinSevenDays
- withinThirtyDays
- overThirtyDays
- scheduledEvent
- recurringSchedule
- preOrder
- other
description: Typical timeframe between payment and fulfillment
example: "immediate"
refundPolicy:
type: string
nullable: true
enum:
- noRefunds
- fullRefundWithinThirtyDays
- fullRefundExtendedWindow
- partialRefund
- storeCreditOnly
- proratedRefund
- conditionalRefund
- eventBasedPolicy
- customPolicy
description: The merchant's refund policy
example: "noRefunds"
SettlementAccount:
type: object
required:
- selectedAccount
properties:
selectedAccount:
type: string
nullable: true
description: The selected settlement account
example: "selectedAccountId"
FeePlan:
type: object
required:
- hasAccepted
properties:
hasAccepted:
type: boolean
nullable: false
description: A boolean that conveys whether or not the user has accepted the fee plan.
example: "false"
EnrollmentError:
type: object
required:
- errorType
- errorEntityId
- fields
properties:
errorType:
type: string
enum: [ representative ]
nullable: false
description: The type of enrollment error
example: "representative"
errorEntityId:
type: string
format: uuid
nullable: false
description: Unique identifier for this error entity
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
fields:
type: array
nullable: false
items:
$ref: '#/components/schemas/EnrollmentErrorField'
EnrollmentErrorField:
type: object
required:
- description
- code
properties:
description:
type: string
nullable: false
description: Description of the field error
example: "Representative SSN is required"
code:
type: string
nullable: false
description: Error code for the field
example: "ssn"
EnrollmentAccountRequest:
type: object
required:
- businessName
- addressLine1
- city
- stateOrProvince
- country
- postalCode
properties:
businessName:
type: string
nullable: false
description: The legal business name
example: "Star Heating and Air LLC"
addressLine1:
type: string
nullable: false
description: Primary street address
example: "123 Main Street"
addressLine2:
type: string
nullable: true
description: Secondary address line (suite, unit, etc.)
example: "Suite 200"
city:
type: string
nullable: false
description: City
example: "Springfield"
stateOrProvince:
type: string
nullable: false
description: State or province
example: "IL"
country:
type: string
nullable: false
description: Two-letter country code
example: "US"
postalCode:
type: string
nullable: false
description: Postal code
example: "62704"
taxId:
type: string
nullable: true
description: Business Tax ID (EIN). May be null if not yet retrieved, in which case the separate tax-id endpoint should be used.
example: "12-3456789"
phoneNumber:
type: string
nullable: true
description: Business phone number
example: "555-123-4567"
phoneCountryCode:
type: string
nullable: true
description: Phone country code (defaults to "1")
example: "1"
EnrollmentAccountResponse:
type: object
required:
- businessName
- addressLine1
- city
- stateOrProvince
- country
- postalCode
- taxId
properties:
businessName:
type: string
nullable: false
description: The legal business name
example: "Star Heating and Air LLC"
addressLine1:
type: string
nullable: false
description: Primary street address
example: "123 Main Street"
addressLine2:
type: string
nullable: true
description: Secondary address line (suite, unit, etc.)
example: "Suite 200"
city:
type: string
nullable: false
description: City
example: "Springfield"
stateOrProvince:
type: string
nullable: false
description: State or province
example: "IL"
country:
type: string
nullable: false
description: Two-letter country code
example: "US"
postalCode:
type: string
nullable: false
description: Postal code
example: "62704"
taxId:
type: string
nullable: true
description: The business Tax ID (EIN). May be null initially, in which case the separate tax-id endpoint can be used to retrieve it.
example: "12-3456789"
phoneNumber:
type: string
nullable: true
description: Business phone number
example: "555-123-4567"
phoneCountryCode:
type: string
nullable: true
description: Phone country code (defaults to "1")
example: "1"
EnrollmentAccountTaxIdResponse:
type: object
required:
- taxId
- taxIdMasked
properties:
taxId:
type: string
nullable: false
description: Business Tax ID (EIN) - unmasked
example: "12-3456789"
taxIdMasked:
type: string
nullable: false
description: Masked Business Tax ID based on TIN type (SSN or EIN)
example: "XXX-XX-6789"
DeclareRepresentatives:
type: object
required:
- representatives
- ownersProvided
properties:
representatives:
nullable: false
type: array
items:
$ref: '#/components/schemas/Representative'
ownersProvided:
type: boolean
nullable: false
description: A boolean confirming that the user has provided all representatives who own 25% or more stake in the company.
example: "false"
AddRepresentativeRequest:
type: object
nullable: false
required:
- firstName
- lastName
- ssnOrItin
- dateOfBirth
- email
- phone
- address
- isControlOfficer
- jobTitle
- isOwner
- ownershipPercentage
properties:
firstName:
type: string
nullable: false
description: The first name of the representative
example: "First"
lastName:
type: string
nullable: false
description: The last name of the representative
example: "Last"
ssnOrItin:
type: string
nullable: false
description: The SSN or ITIN of the representative
example: "1111111111"
dateOfBirth:
type: string
format: date
nullable: false
description: The Date of Birth of the representative
example: "2024-10-04"
email:
type: string
nullable: false
description: The Email Address of the representative
example: "email@email.com"
phone:
type: string
nullable: false
description: The Phone Number of the representative
example: "5555555555"
address:
nullable: false
$ref: '#/components/schemas/Address'
isControlOfficer:
type: boolean
nullable: false
description: Is the representative a control officer
example: true
jobTitle:
type: string
nullable: true
description: The representative's title, required if isControlOfficer is true
example: "CEO"
isOwner:
type: boolean
nullable: false
description: Is the representative an owner of the business
example: true
ownershipPercentage:
type: number
format: integer
minimum: 0
maximum: 100
nullable: true
description: The percentage of the business this representative owns, required if isOwner is true
example: 100
Representative:
type: object
nullable: false
required:
- id
- firstName
- lastName
- email
- phone
- address
- isControlOfficer
- jobTitle
- isOwner
- ownershipPercentage
properties:
id:
nullable: false
type: string
description: The id of this representative
example: "representativeId"
firstName:
type: string
nullable: false
description: The first name of the representative
example: "First"
lastName:
type: string
nullable: false
description: The last name of the representative
example: "Last"
email:
type: string
nullable: false
description: The Email Address of the representative
example: "email@email.com"
phone:
type: string
nullable: false
description: The Phone Number of the representative
example: "5555555555"
address:
nullable: false
$ref: '#/components/schemas/Address'
isControlOfficer:
type: boolean
nullable: false
description: Is the representative a control officer
example: true
jobTitle:
type: string
nullable: true
description: The representative's title, required if isControlOfficer is true
example: "CEO"
isOwner:
type: boolean
nullable: false
description: Is the representative an owner of the business
example: true
ownershipPercentage:
type: number
format: integer
minimum: 0
maximum: 100
nullable: true
description: The percentage of the business this representative owns, required if isOwner is true
example: 100
UpdateRepresentativeRequest:
type: object
nullable: false
required:
- firstName
- lastName
- email
- phone
- address
- isControlOfficer
- jobTitle
- isOwner
- ownershipPercentage
properties:
firstName:
type: string
nullable: false
description: The first name of the representative
example: "First"
lastName:
type: string
nullable: false
description: The last name of the representative
example: "Last"
email:
type: string
nullable: false
description: The Email Address of the representative
example: "email@email.com"
phone:
type: string
nullable: false
description: The Phone Number of the representative
example: "5555555555"
address:
nullable: false
$ref: '#/components/schemas/Address'
isControlOfficer:
type: boolean
nullable: false
description: Is the representative a control officer
example: true
jobTitle:
type: string
nullable: true
description: The representative's title, required if isControlOfficer is true
example: "CEO"
isOwner:
type: boolean
nullable: false
description: Is the representative an owner of the business
example: true
ownershipPercentage:
type: number
format: integer
minimum: 0
maximum: 100
nullable: true
description: The percentage of the business this representative owns, required if isOwner is true
example: 100
StandardError:
required:
- type
- title
- details
- data
type: object
properties:
type:
type: string
nullable: false
description: The error type.
example: "jackhenry/operation-failed"
title:
type: string
nullable: false
description: The title of the error. This is a short, human readable summary of the error.
example: An unexpected error has occurred.
details:
type: array
items:
type: string
nullable: false
description: An array of strings that provide additional details for the error message.
data:
type: array
items:
allOf:
- $ref: '#/components/schemas/ErrorData'
ErrorData:
required:
- element
- description
- elementValue
type: object
properties:
element:
type: string
nullable: false
description: The element causing an error.
example: "industryId"
description:
type: string
nullable: false
description: A description of how the element is causing an error.
example: "Industry is required"
elementValue:
type: string
nullable: false
description: The value of the element causing an error.
example: ""
SendReceiptRequest:
required:
- email
type: object
properties:
email:
type: string
nullable: false
description: The email to send the receipt to.
example: "example@example.com"
GetStatementsResponse:
required:
- statements
type: object
properties:
statements:
nullable: false
type: array
items:
allOf:
- $ref: '#/components/schemas/Statement'
Statement:
required:
- id
- name
- billingPeriodStartDate
type: object
properties:
id:
nullable: false
type: string
description: The id of the statement.
example: "statementId"
name:
type: string
nullable: false
description: The name of the statement.
example: "Billing statement"
billingPeriodStartDate:
type: string
format: date
nullable: false
description: The starting date of the statement's billing period.
example: "2024-12-01"
ProductCreateRequest:
required:
- title
- description
- basePrice
- optionGroups
- imageId
type: object
properties:
title:
type: string
nullable: false
description: The title of the product
example: "Rubik's cube"
description:
type: string
nullable: true
description: The description of the product
example: "Puzzle game with 9 color squares on each side."
basePrice:
type: string
nullable: false
description: The base price of the product represented as a String following the Consumer Api Guidelines.
optionGroups:
type: array
nullable: true
description: Array of optional modifiers for the product
items:
$ref: '#/components/schemas/OptionGroup'
imageId:
type: string
format: uuid
nullable: true
description: Image identifier for the product
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
GetProductsResponse:
required:
- products
type: object
properties:
products:
nullable: false
type: array
items:
allOf:
- $ref: '#/components/schemas/Product'
UpdateProductRequest:
required:
- title
- description
- basePrice
- optionGroups
- imageId
type: object
properties:
title:
type: string
nullable: false
description: The title of the product
example: "Rubik's cube"
description:
type: string
nullable: true
description: The description of the product
example: "Puzzle game with 9 color squares on each side."
basePrice:
type: string
nullable: false
description: The base price of the product represented as a String following the Consumer Api Guidelines.
optionGroups:
type: array
nullable: true
description: Array of optional modifiers for the product
items:
$ref: '#/components/schemas/OptionGroup'
imageId:
type: string
format: uuid
nullable: true
description: Image identifier for the product
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
Product:
required:
- id
- title
- description
- basePrice
- optionGroups
- image
type: object
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this product
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
title:
type: string
nullable: false
description: The title of the product
example: "Rubik's cube"
description:
type: string
nullable: true
description: The description of the product
example: "Puzzle game with 9 color squares on each side."
basePrice:
type: string
nullable: false
description: The base price of the product represented as a String following the Consumer Api Guidelines.
optionGroups:
type: array
nullable: true
description: Array of optional modifiers for the product
items:
$ref: '#/components/schemas/OptionGroup'
image:
$ref: '#/components/schemas/ProductImage'
nullable: true
description: The image for this product
ProductImage:
required:
- imageId
- url
type: object
properties:
imageId:
type: string
format: uuid
nullable: false
description: Unique identifier for this image
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
url:
type: string
nullable: false
description: URL to access the uploaded image
example: "https://api.moov.io/images/928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
LineItem:
required:
- name
- productId
- imageUrl
- quantity
- options
- basePrice
type: object
description: A line item is one of two things, a custom amount or a product selection. A custom amount should only have `name`, `basePrice` and `quantity` fields defined. A product selection should have `name` (the product's name field), `productId`, `basePrice` (the product's basePrice field), `quantity` and `options` fields defined.
properties:
name:
type: string
nullable: false
minLength: 1
maxLength: 150
description: The name of the line item
example: "Rubik's Cube - Large"
productId:
type: string
format: uuid
nullable: true
description: Optional UUID to associate the item with a product
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
imageUrl:
type: string
nullable: true
description: URL to access the line item's product image if one exists.
example: "https://api.moov.io/images/928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
basePrice:
type: string
nullable: false
description: The base price of the line item represented as a String following the Consumer Api Guidelines.
example: "29.99"
quantity:
type: integer
nullable: false
minimum: 1
description: The quantity of this line item
example: 2
options:
type: array
nullable: false
description: Options for this line item. Can be empty.
items:
$ref: '#/components/schemas/LineItemOption'
LineItemOption:
required:
- groupName
- optionName
- basePriceModifier
type: object
properties:
optionName:
type: string
nullable: false
minLength: 1
maxLength: 150
description: The name of the option
example: "Extra Large Size"
groupName:
type: string
nullable: false
maxLength: 100
description: Name of the OptionGroup for this Option
example: "Size"
basePriceModifier:
type: string
nullable: false
description: Price modification for this option represented as a String following the Consumer Api Guidelines.
example: "5.00"
OptionGroup:
required:
- name
- options
- minSelect
- maxSelect
type: object
properties:
name:
type: string
nullable: false
description: The name of the option group, unique within a product
example: "Size"
minSelect:
type: integer
nullable: false
description: The minimum number of options that must be selected from this group. Use 0 for no required selection.
example: 1
maxSelect:
type: integer
nullable: true
description: The maximum number of options that can be selected from this group. Must not be zero. Use null for no maximum selection.
example: 3
options:
type: array
nullable: false
description: Available options in this group
items:
$ref: '#/components/schemas/Option'
Option:
required:
- name
- basePriceModifier
type: object
properties:
name:
type: string
nullable: false
description: The name of the option, unique within an option group
example: "Large"
basePriceModifier:
type: string
nullable: false
description: Amount to add to the base price when this option is selected represented as a String following the Consumer Api Guidelines.
CustomerCreateRequest:
required:
- type
- firstName
- lastName
- legalBusinessName
- doingBusinessAs
- email
- phoneNumber
- address
type: object
properties:
type:
type: string
nullable: false
enum: [ individual, business ]
firstName:
type: string
nullable: true
description: The first name of the customer. This should be non-null when the customer type is 'individual'.
example: "Bob"
lastName:
type: string
nullable: true
description: The last name of the customer. This should be non-null when the customer type is 'individual'.
example: "Smith"
legalBusinessName:
type: string
nullable: true
description: The legal name under which the business is registered. This should be non-null when the customer type is 'business'.
example: "AquaSync Corp"
doingBusinessAs:
type: string
nullable: true
description: A registered trade name under which the business operates, if different from its legal name. This should always be null if the customer type is 'individual' and could be either null or non-null when the customer type is 'business'.
example: "The Water Heater Depot"
email:
type: string
nullable: false
description: The customer's email
example: "customer@gmail.com"
phoneNumber:
type: string
nullable: true
description: The customer's phone number
example: "+1 888-762-8373"
address:
$ref: '#/components/schemas/Address'
nullable: true
description: The customer's address
GetCustomersResponse:
required:
- customers
type: object
properties:
customers:
nullable: false
type: array
items:
allOf:
- $ref: '#/components/schemas/Customer'
UpdateCustomerRequest:
required:
- firstName
- lastName
- legalBusinessName
- doingBusinessAs
- email
- phoneNumber
- address
type: object
properties:
firstName:
type: string
nullable: true
description: The first name of the customer. This should be non-null when the customer type is 'individual'.
example: "Bob"
lastName:
type: string
nullable: true
description: The last name of the customer. This should be non-null when the customer type is 'individual'.
example: "Smith"
legalBusinessName:
type: string
nullable: true
description: The legal name under which the business is registered. This should be non-null when the customer type is 'business'.
example: "AquaSync Corp"
doingBusinessAs:
type: string
nullable: true
description: A registered trade name under which the business operates, if different from its legal name. This should always be null if the customer type is 'individual' and could be either null or non-null when the customer type is 'business'.
example: "The Water Heater Depot"
email:
type: string
nullable: false
description: The customer's email
example: "customer@gmail.com"
phoneNumber:
type: string
nullable: true
description: The customer's phone number
example: "+1 888-762-8373"
address:
$ref: '#/components/schemas/Address'
nullable: true
description: The customer's address
Customer:
required:
- id
- type
- firstName
- lastName
- legalBusinessName
- doingBusinessAs
- guestDisplayName
- email
- phoneNumber
- address
- firstAdded
type: object
properties:
id:
type: string
format: uuid
nullable: false
description: Unique identifier for this customer
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
type:
type: string
nullable: false
enum: [ individual, business, guest ]
firstName:
type: string
nullable: true
description: The first name of the customer. This should be non-null when the customer type is 'individual'.
example: "Bob"
lastName:
type: string
nullable: true
description: The last name of the customer. This should be non-null when the customer type is 'individual'.
example: "Smith"
legalBusinessName:
type: string
nullable: true
description: The legal name under which the business is registered. This should be non-null when the customer type is 'business'.
example: "AquaSync Corp"
doingBusinessAs:
type: string
nullable: true
description: A registered trade name under which the business operates, if different from its legal name. This should always be null if the customer type is 'individual' or 'guest' and could be either null or non-null when the customer type is 'business'.
example: "The Water Heater Depot"
guestDisplayName:
type: string
nullable: true
description: The display name of the customer. This should be non-null when the customer type is 'guest'.
example: "Bob Smith"
email:
type: string
nullable: true
description: The customer's email. This should always be present unless the customer type is `guest`. If the customer type is `guest`, the email may be present or it may be null.
example: "customer@gmail.com"
phoneNumber:
type: string
nullable: true
description: The customer's phone number
example: "+1 888-762-8373"
address:
$ref: '#/components/schemas/Address'
nullable: true
description: The customer's address
firstAdded:
type: string
format: dateTime
nullable: true
description: The dateTime the customer was added
example: "2024-10-04T05:00:00.000Z"
Invoice:
required:
- id
- customer
- description
- invoiceNumber
- status
- createdOn
- sentOn
- canceledOn
- invoiceDate
- dueDate
- paidOn
- lineItems
- disputedAmount
- paidAmount
- pendingAmount
- refundedAmount
- subtotalAmount
- taxAmount
- totalAmount
- transferPayments
- externalPayments
type: object
properties:
id:
type: string
format: uuid
nullable: false
description: The id of this Invoice
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
customer:
$ref: "#/components/schemas/MoovAccount"
invoiceNumber:
type: string
nullable: false
description: The number of the invoice
example: "#INV-1001"
description:
type: string
nullable: true
description: The description of the invoice
example: "An invoice for ..."
status:
type: string
enum: [ draft, unpaid, payment-pending, paid, overdue, canceled ]
nullable: false
description: The status of the Invoice.
example: draft
createdOn:
type: string
format: date
nullable: false
description: The date the Invoice was created.
example: "2024-10-04"
sentOn:
type: string
format: date
nullable: true
description: The date the Invoice was sent to the customer.
example: "2024-10-04"
canceledOn:
type: string
format: date
nullable: true
description: The date the Invoice was canceled.
example: "2024-10-04"
invoiceDate:
type: string
format: date
nullable: true
description: The date of the Invoice.
example: "2024-10-04"
dueDate:
type: string
format: date
nullable: true
description: The date when the Invoice is due.
example: "2024-10-04"
paidOn:
type: string
format: date
nullable: true
description: The date when the Invoice was paid in full.
example: "2024-10-04"
lineItems:
type: array
nullable: false
description: Line items for this Invoice
items:
$ref: '#/components/schemas/LineItem'
disputedAmount:
type: string
nullable: false
description: The disputed amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
paidAmount:
type: string
nullable: false
description: The paid amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
pendingAmount:
type: string
nullable: false
description: The pending amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
refundedAmount:
type: string
nullable: false
description: The refunded amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
subtotalAmount:
type: string
nullable: false
description: The subtotal amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
taxAmount:
type: string
nullable: false
description: The tax amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
totalAmount:
type: string
nullable: false
description: The total amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
transferPayments:
type: array
nullable: false
description: Array of transfer ids for this Invoice.
items:
type: string
externalPayments:
type: array
nullable: false
description: Array of external payments for this Invoice.
items:
$ref: '#/components/schemas/ExternalPayment'
ExternalPayment:
required:
- id
- description
- paidOn
- amount
type: object
properties:
id:
type: string
nullable: false
description: Id of this external payment.
example: "EXT-PAY-12345"
description:
type: string
nullable: true
description: Description of the external payment.
example: "Check payment received"
paidOn:
type: string
format: date
nullable: true
description: The date of when the external payment was received.
example: "2025-11-15"
amount:
type: string
nullable: false
description: The payment amount represented as a String following the Consumer Api Guidelines.
GetInvoicesResponse:
required:
- invoices
type: object
properties:
invoices:
nullable: false
type: array
items:
allOf:
- $ref: '#/components/schemas/Invoice'
CreateInvoiceRequest:
required:
- customerId
- lineItems
- description
- dueDate
- invoiceDate
- taxAmount
type: object
properties:
customerId:
type: string
format: uuid
nullable: false
description: The id of the customer this invoice is for
example: "928512e3-6657-40ea-b8a3-68f7e7e0bb5c"
lineItems:
type: array
nullable: false
description: Line items for this Invoice
items:
$ref: '#/components/schemas/LineItem'
description:
type: string
nullable: true
description: The description of the invoice
example: "An invoice for ..."
dueDate:
type: string
format: date
nullable: true
description: The date when the Invoice is due.
example: "2025-11-15"
invoiceDate:
type: string
format: date
nullable: false
description: The date of the Invoice.
example: "2025-11-15"
taxAmount:
type: string
nullable: true
description: The tax amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
EditInvoiceRequest:
required:
- description
- invoiceDate
- dueDate
- lineItems
- taxAmount
type: object
properties:
description:
type: string
nullable: true
description: The description of the invoice
example: "An invoice for ..."
invoiceDate:
type: string
format: date
nullable: true
description: The date of the Invoice.
example: "2025-11-15"
dueDate:
type: string
format: date
nullable: true
description: The date when the Invoice is due.
example: "2025-11-15"
lineItems:
type: array
nullable: false
description: Line items for this Invoice
items:
$ref: '#/components/schemas/LineItem'
taxAmount:
type: string
nullable: true
description: The tax amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
MarkInvoiceAsPaidRequest:
required:
- date
- description
- amount
type: object
properties:
date:
type: string
format: date
nullable: false
description: The date on which the Invoice was paid externally.
example: "2025-11-15"
description:
type: string
nullable: true
description: The description of the external payment
example: "Paid via check"
amount:
type: string
nullable: false
description: The amount represented as a String following the Consumer Api Guidelines.
example: "2.50"
Did this page help you?
Why was this page helpful?
Why wasn't this page helpful?
Thank you for your feedback!
Last updated Fri Jan 16 2026