Payabli Customer API
The Customer API from Payabli — 4 operation(s) for customer.
The Customer API from Payabli — 4 operation(s) for customer.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/payabli-customer-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: reference Customer API
version: 1.0.0
servers:
- url: https://api-sandbox.payabli.com/api
description: Sandbox
- url: https://api.payabli.com/api
description: Production
tags:
- name: Customer
paths:
/Customer/single/{entry}:
post:
operationId: AddCustomer
summary: Add customer
description: 'Creates a customer in an entrypoint. An identifier is required to create customer records. Change your identifier settings in Settings > Custom Fields in the Payabli Portal.
If you don''t include an identifier, the record is rejected.'
tags:
- Customer
parameters:
- name: entry
in: path
description: The entrypoint identifier.
required: true
schema:
$ref: '#/components/schemas/Entrypointfield'
- name: forceCustomerCreation
in: query
description: When `true`, the request creates a new customer record, regardless of whether customer identifiers match an existing customer.
required: false
schema:
type: boolean
default: false
- name: replaceExisting
in: query
description: 'Flag indicating to replace existing customer with a new record. Possible values: 0 (don''t replace), 1 (replace). Default is `0`.'
required: false
schema:
type: integer
default: 0
- name: Authorization
in: header
description: 'OAuth2 Bearer access token from the client-credentials flow. See [OAuth authentication](/developers/oauth-authentication).
'
required: true
schema:
type: string
- name: idempotencyKey
in: header
description: _Optional but recommended_ A unique ID that you can include to prevent duplicating objects or transactions in the case that a request is sent more than once. This key isn't generated in Payabli, you must generate it yourself. This key persists for 2 minutes. After 2 minutes, you can reuse the key if needed.
required: false
schema:
$ref: '#/components/schemas/IdempotencyKey'
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliApiResponseCustomerQuery'
'400':
description: Bad request / invalid data.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'401':
description: Unauthorized request.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'503':
description: Database connection error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerData'
/Customer/{customerId}:
get:
operationId: GetCustomer
summary: Get customer record
description: Retrieves a customer's record and details.
tags:
- Customer
parameters:
- name: customerId
in: path
description: Payabli-generated customer ID. Maps to "Customer ID" column in the Payabli Portal.
required: true
schema:
type: integer
- name: Authorization
in: header
description: 'OAuth2 Bearer access token from the client-credentials flow. See [OAuth authentication](/developers/oauth-authentication).
'
required: true
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerQueryRecords'
'400':
description: Bad request / invalid data.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'401':
description: Unauthorized request.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'503':
description: Database connection error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
put:
operationId: UpdateCustomer
summary: Update customer record
description: Update a customer record. Include only the fields you want to change.
tags:
- Customer
parameters:
- name: customerId
in: path
description: Payabli-generated customer ID. Maps to "Customer ID" column in the Payabli Portal.
required: true
schema:
type: integer
- name: Authorization
in: header
description: 'OAuth2 Bearer access token from the client-credentials flow. See [OAuth authentication](/developers/oauth-authentication).
'
required: true
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliApiResponse00Responsedatanonobject'
'400':
description: Bad request / invalid data.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'401':
description: Unauthorized request.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'503':
description: Database connection error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerData'
delete:
operationId: DeleteCustomer
summary: Delete customer record
description: Delete a customer record.
tags:
- Customer
parameters:
- name: customerId
in: path
description: Payabli-generated customer ID. Maps to "Customer ID" column in the Payabli Portal.
required: true
schema:
type: integer
- name: Authorization
in: header
description: 'OAuth2 Bearer access token from the client-credentials flow. See [OAuth authentication](/developers/oauth-authentication).
'
required: true
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliApiResponse00Responsedatanonobject'
'400':
description: Bad request / invalid data.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'401':
description: Unauthorized request.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'503':
description: Database connection error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
/Customer/link/{customerId}/{transId}:
get:
operationId: LinkCustomerTransaction
summary: Link Customer to Transaction
description: Links a customer to a transaction by ID.
tags:
- Customer
parameters:
- name: customerId
in: path
description: Payabli-generated customer ID. Maps to "Customer ID" column in the Payabli Portal.
required: true
schema:
type: integer
- name: transId
in: path
description: ReferenceId for the transaction (PaymentId).
required: true
schema:
type: string
- name: Authorization
in: header
description: 'OAuth2 Bearer access token from the client-credentials flow. See [OAuth authentication](/developers/oauth-authentication).
'
required: true
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliApiResponse00Responsedatanonobject'
'400':
description: Bad request / invalid data.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'401':
description: Unauthorized request.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'503':
description: Database connection error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
/Customer/{customerId}/consent:
post:
operationId: RequestConsent
summary: Request consent opt-in
description: Sends the consent opt-in email to the customer email address in the customer record.
tags:
- Customer
parameters:
- name: customerId
in: path
description: Payabli-generated customer ID. Maps to "Customer ID" column in the Payabli Portal.
required: true
schema:
type: integer
- name: Authorization
in: header
description: 'OAuth2 Bearer access token from the client-credentials flow. See [OAuth authentication](/developers/oauth-authentication).
'
required: true
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliApiResponse00Responsedatanonobject'
'400':
description: Bad request / invalid data.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'401':
description: Unauthorized request.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
'503':
description: Database connection error.
content:
application/json:
schema:
$ref: '#/components/schemas/PayabliErrorBody'
components:
schemas:
ItemDescription:
type: string
description: Item or product description. Max length of 250 characters.
title: ItemDescription
SplitFundingContent:
type: object
properties:
accountId:
type: string
description: The accountId for the account the split should be sent to.
amount:
type: number
format: double
description: Amount from the transaction to send to this recipient.
description:
type: string
description: A description for the split.
recipientEntryPoint:
type: string
description: The entrypoint the split should be sent to.
title: SplitFundingContent
AvsResponseText:
type: string
description: 'Text code describing the result for address validation (applies only for
card transactions).
'
title: AvsResponseText
ExternalPaypointId:
type: string
description: 'A custom identifier for the paypoint, if applicable.
'
title: ExternalPaypointId
CustomerQueryRecordsCustomerConsentSms:
type: object
properties:
status:
$ref: '#/components/schemas/OptinStatus'
updatedAt:
$ref: '#/components/schemas/LastModified'
description: Describes the customer's SMS communications consent status.
title: CustomerQueryRecordsCustomerConsentSms
Dbaname:
type: string
description: 'The alternate or common name that this business is doing business under,
usually referred to as a DBA name.
'
title: Dbaname
SummaryCommodityCode:
type: string
description: Commodity code.
title: SummaryCommodityCode
QueryTransactionEventsEventData:
oneOf:
- type: object
additionalProperties:
description: Any type
- type: string
description: 'Any data associated to the event received from processor. Contents vary
by event type.
'
title: QueryTransactionEventsEventData
Sequence:
type: string
description: "The order of the transaction for cardholder-initiated transaction (CIT)\nand merchant-initiated transaction (MIT) purposes. This field is\nautomatically detected and populated by Payabli.\n\nAvailable values:\n\n- `first`: The first use of the payment method. This is almost always\n a cardholder-initiated transaction.\n- `subsequent`: For merchant-initiated transactions after the first use\n of the payment method.\n\nSee\n[Understanding CIT and MIT Indicators](/guides/pay-in-transactions-cit-mit-overview)\nfor more information.\n"
title: Sequence
PaymentCategories:
type: object
properties:
amount:
type: number
format: double
description: Price/cost per unit of item or category.
description:
type: string
description: Description of item or category
label:
type: string
description: Name of item or category.
qty:
type: integer
default: 1
description: Quantity of item or category
required:
- amount
- label
title: PaymentCategories
IsSuccess:
type: boolean
description: 'Boolean indicating whether the operation was successful. A `true` value
indicates success. A `false` value indicates failure.
'
title: IsSuccess
FeeAmount:
type: number
format: double
description: Service fee or sub-charge applied.
title: FeeAmount
SubscriptionQueryRecords:
type: object
properties:
CreatedAt:
$ref: '#/components/schemas/CreatedAt'
description: Timestamp of when the subscription ws created, in UTC.
Customer:
$ref: '#/components/schemas/QueryTransactionPayorData'
EndDate:
type:
- string
- 'null'
format: date-time
description: The subscription's end date.
EntrypageId:
$ref: '#/components/schemas/EntrypageId'
ExternalPaypointID:
$ref: '#/components/schemas/ExternalPaypointId'
FeeAmount:
type: number
format: double
description: Fee applied to the subscription.
Frequency:
type: string
description: The subscription's frequency.
IdSub:
type: integer
format: int64
description: The subscription's ID.
invoiceData:
$ref: '#/components/schemas/BillData'
LastRun:
type:
- string
- 'null'
format: date-time
description: The last time the subscription was processed.
LastUpdated:
$ref: '#/components/schemas/LastModified'
description: The last date and time the subscription was updated.
LeftCycles:
type: integer
description: The number of cycles the subscription has left.
Method:
type: string
description: The subscription's payment method.
NetAmount:
$ref: '#/components/schemas/Netamountnullable'
description: The subscription amount, minus any fees.
NextDate:
type:
- string
- 'null'
format: date-time
description: The next date the subscription will be processed.
ParentOrgName:
$ref: '#/components/schemas/OrgParentName'
PaymentData:
$ref: '#/components/schemas/QueryPaymentData'
PaypointDbaname:
$ref: '#/components/schemas/Dbaname'
description: The paypoint's DBA name.
PaypointEntryname:
$ref: '#/components/schemas/Entrypointfield'
description: The paypoint's entryname.
PaypointId:
$ref: '#/components/schemas/PaypointId'
PaypointLegalname:
$ref: '#/components/schemas/Legalname'
description: The paypoint's legal name.
PlanId:
type: integer
description: Payment plan ID.
Source:
$ref: '#/components/schemas/Source'
StartDate:
type:
- string
- 'null'
format: date-time
description: The subscription start date.
StoredMethod:
oneOf:
- $ref: '#/components/schemas/VendorResponseStoredMethod'
- type: 'null'
description: 'The full stored payment method record linked to the subscription
and charged on each billing cycle. Returned as `null` for legacy
subscriptions that don''t have a linked stored method.
The shape is the same across payment vehicles (card, ACH, check).
Only the populated fields differ. For example, `ABA` is populated
for ACH, while `ExpDate` and `binData` are populated for card.'
SubEvents:
type: array
items:
$ref: '#/components/schemas/GeneralEvents'
description: Events associated with the subscription.
SubStatus:
type: integer
description: 'The subscription''s status.
- 0: Paused
- 1: Active'
SubscriptionType:
oneOf:
- $ref: '#/components/schemas/SubscriptionType'
- type: 'null'
description: Subscription type or category. Returns `null` when no type is assigned.
TotalAmount:
type: number
format: double
description: The subscription amount, including any fees.
TotalCycles:
type: integer
description: The total number of cycles the subscription is set to run.
UntilCancelled:
type: boolean
description: When `true`, the subscription has no explicit end date and will run until canceled.
required:
- EndDate
- LastRun
- NextDate
- StartDate
- StoredMethod
title: SubscriptionQueryRecords
Storedmethodid:
type: string
description: 'Payabli identifier of a tokenized payment method. If this field is
used in a request, the `method` field is overridden and the payment
is made using the payment token.
'
title: Storedmethodid
PayorId:
type: integer
format: int64
description: 'Unique ID for the customer linked to the transaction. This is the same
value as the `customerId` used when creating or referencing a customer.
'
title: PayorId
IdempotencyKey:
type: string
description: '_Optional but recommended._ A unique ID that you can include to prevent
duplicating objects or transactions in the case that a request is sent
more than once. This key isn''t generated in Payabli; you must generate it
yourself. The key persists for 2 minutes. After 2 minutes, you can reuse
the key if needed.
'
title: IdempotencyKey
FileContentFtype:
type: string
enum:
- pdf
- doc
- docx
- jpg
- jpeg
- png
- gif
- txt
description: The MIME type of the file (if content is provided).
title: FileContentFtype
AdditionalDataMap:
type: object
additionalProperties:
type: string
description: "Custom dictionary of key:value pairs. You can use this field to store any\ndata related to the object or for your system. If you are using\n[custom identifiers](/developers/developer-guides/entities-customers),\npass those in this object. Max length for a value is 100 characters.\n\n```json\n{\n \"additionalData\": {\n \"key1\": \"value1\",\n \"key2\": \"value2\",\n \"key3\": \"value3\"\n }\n}\n```\n"
title: AdditionalDataMap
MfaMode:
type: integer
title: MfaMode
SplitFunding:
type: array
items:
$ref: '#/components/schemas/SplitFundingContent'
description: Split funding instructions for the transaction. The total amount of the splits must match the total amount of the transaction.
title: SplitFunding
Orgid:
type: integer
format: int64
description: Organization ID. Unique identifier assigned to an org by Payabli.
title: Orgid
Operation:
type: string
description: The transaction's operation.
title: Operation
PayabliApiResponse00Responsedatanonobject:
type: object
properties:
responseCode:
$ref: '#/components/schemas/Responsecode'
pageIdentifier:
$ref: '#/components/schemas/PageIdentifier'
roomId:
type: integer
format: int64
description: Describes the room ID. Only in use on Boarding endpoints, returns `0` when not applicable.
isSuccess:
$ref: '#/components/schemas/IsSuccess'
responseText:
$ref: '#/components/schemas/ResponseText'
responseData:
$ref: '#/components/schemas/Responsedatanonobject'
required:
- responseText
title: PayabliApiResponse00Responsedatanonobject
InvoiceAmount:
type: number
format: double
description: The invoice amount.
title: InvoiceAmount
BillDataPaymentTerms:
type: string
enum:
- PIA
- CIA
- UR
- NET10
- NET20
- NET30
- NET45
- NET60
- NET90
- EOM
- MFI
- 5MFI
- 10MFI
- 15MFI
- 20MFI
- 2/10NET30
- UF
- 10UF
- 20UF
- 25UF
- 50UF
description: 'Payment terms for invoice. If no terms are defined, then response data for
this field defaults to `NET30`. Mirrors the values in
[`Terms`](#schema-terms).
'
title: BillDataPaymentTerms
ResultCodeText:
type: string
description: 'Description of the result code. See
[Pay In unified response codes](/guides/pay-in-unified-response-codes-reference)
for more information.
'
title: ResultCodeText
Mfa:
type: boolean
description: When `true`, multi-factor authentication (MFA) is enabled.
title: Mfa
BatchNumber:
type: string
description: 'A unique identifier for the batch. This is generated by Payabli when the
batch is created, and follows this format:
`paypointId + "_" + serviceName + "_" + batchDate:yyyyMMdd + "_" + Guid.NewGuid()`.
Payabli generates the GUID to ensure that the batch number is unique.
For example, in this batch number:
`123_card_20251008_3f2504e0-4f89-11d3-9a0c-0305e82c3301`, the paypointID
is `123`, the service is `card`, the batch date is `2025-10-08`, and
the GUID is `3f2504e0-4f89-11d3-9a0c-0305e82c3301`.
'
title: BatchNumber
GeneralEvents:
type: object
properties:
description:
type: string
description: Event description.
eventTime:
type: string
format: date-time
description: Event timestamp, in UTC.
extraData:
type:
- string
- 'null'
description: Extra data.
refData:
type: string
description: Reference data.
source:
$ref: '#/components/schemas/Source'
description: The event source.
title: GeneralEvents
BillItem:
type: object
properties:
itemCategories:
type: array
items:
type: string
description: Array of tags classifying item or product.
itemCommodityCode:
$ref: '#/components/schemas/ItemCommodityCode'
itemCost:
type: number
format: double
description: Item or product price per unit.
itemDescription:
$ref: '#/components/schemas/ItemDescription'
itemMode:
type: integer
description: 'Internal class of item or product: value `0` is only for invoices,
`1` for bills, and `2` is common for both. Required on invoice line
items — invoice creation fails with `Invalid item data` if it''s omitted.
'
itemProductCode:
$ref: '#/components/schemas/ItemProductCode'
itemProductName:
$ref: '#/components/schemas/ItemProductName'
itemQty:
type: integer
description: Quantity of item or product.
itemTaxAmount:
type: number
format: double
description: Tax amount applied to item or product.
itemTaxRate:
type: number
format: double
description: Tax rate applied to item or product.
itemTotalAmount:
type: number
format: double
description: 'Per-line total for this item (unit cost times quantity). Distinct from
the invoice''s overall total, `invoiceAmount`. Required on invoice line items.
'
itemUnitOfMeasure:
$ref: '#/components/schemas/ItemUnitofMeasure'
title: BillItem
Orderdescription:
type: string
description: Text description of the transaction.
title: Orderdescription
Accounttype:
type: string
description: Bank account type or card brand.
title: Accounttype
AchHolderType:
type: string
enum:
- personal
- business
default: personal
description: 'The bank''s accountholder type: personal or business.
'
title: AchHolderType
ItemProductName:
type: string
description: Item or product name. Max length of 250 characters.
title: ItemProductName
VendorResponseStoredMethod:
type: object
properties:
IdPmethod:
type:
- string
- 'null'
Method:
type:
- string
- 'null'
Descriptor:
type:
- string
- 'null'
MaskedAccount:
type:
- string
- 'null'
ExpDate:
type:
- string
- 'null'
HolderName:
type:
- string
- 'null'
AchSecCode:
type:
- string
- 'null'
AchHolderType:
type:
- string
- 'null'
IsValidatedACH:
type:
- boolean
- 'null'
BIN:
type:
- string
- 'null'
binData:
oneOf:
- $ref: '#/components/schemas/BinData'
- type: 'null'
ABA:
type:
- string
- 'null'
PostalCode:
type:
- string
- 'null'
MethodType:
type:
- string
- 'null'
WalletType:
type:
- string
- 'null'
description: Digital wallet type if applicable.
LastUpdated:
type:
- string
- 'null'
format: date-time
CardUpdatedOn:
type:
- string
- 'null'
format: date-time
description: Date and time the card was last updated.
required:
- IdPmethod
- Method
- Descriptor
- MaskedAccount
- ExpDate
- HolderName
- AchSecCode
- AchHolderType
- IsValidatedACH
- BIN
- binData
- ABA
- PostalCode
- MethodType
- WalletType
- LastUpdated
- CardUpdatedOn
description: Stored payment method information
title: VendorResponseStoredMethod
OrderId:
type: string
description: Custom identifier for the transaction.
title: OrderId
TermsConditions:
type: string
description: Custom terms and conditions included in the invoice.
title: TermsConditions
ExternalProcessorInformation:
type: string
description: Information from the external processor about the transaction.
title: ExternalProcessorInformation
Attachments:
type: array
items:
$ref: '#/components/schemas/FileContent'
description: 'Array of `fileContent` objects with attached documents. Max upload size is
30 MB.
'
title: Attachments
PendingFeeAmount:
type: number
format: double
description: 'The difference between the configured pass-through fee and the fee amount
sent in the request. When transferring funds, Payabli uses this field to
deduct the fee difference and transfer the correct amount to the
merchant.
When a paypoint is set up to absorb fees, and the pass-through fee sent
with the request is less than the configured amount, the difference must
be covered by the merchant. See
[Fee Configuration](/guides/pay-in-fees-passthrough-overview#fee-configuration)
to learn more about pass-through fee settings.
'
title: PendingFeeAmount
MethodQueryRecords:
type: object
properties:
IdPmethod:
type: string
description: Method internal ID
Method:
type: string
description: 'Type of payment vehicle: **ach** or **card**'
Descriptor:
$ref: '#/components/schemas/Descriptor'
MaskedAccount:
$ref: '#/components/schemas/Maskedaccount'
ExpDate:
type: string
description: Expiration date associated to the method (only for card) in format MMYY.
HolderName:
$ref: '#/components/schemas/Holdername'
AchSecCode:
type:
- string
- 'null'
description: Standard Entry Class (SEC) code for the ACH transaction.
AchHolderType:
type:
- string
- 'null'
description: 'Bank accountholder type: `personal` or `business`.'
IsValidatedACH:
type:
- boolean
- 'null'
description: Whether the ACH account has been validated.
BIN:
type: string
description: The bank identification number (BIN). Null when method is ACH.
binData:
$ref: '#/components/schemas/BinData'
ABA:
type:
- string
- 'null'
description: Bank routing number.
PostalCode:
type:
- string
- 'null'
description: The payment method postal code.
MethodType:
type:
- st
# --- truncated at 32 KB (74 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/payabli/refs/heads/main/openapi/payabli-customer-api-openapi.yml