curl -X GET "https://api.billingmart.com/v1/payment-links/{linkId}" \
-H "Authorization: Bearer $BILLINGMART_API_KEY"
payment links
Summary
GET/v1/payment-links/{linkId}/summary
A payment link's settings and what it has done: views (all time, the last week and the last month), an approximate count of different visitors, checkouts started, paid and abandoned by reason, money collected (gross and net of refunds), conversion, last activity and a daily series for the last month. A link of another business is NOT_FOUND.
Errors this route can answer besides the shared ones: NOT_FOUND.
Example requestSample
curl -X GET "https://api.billingmart.com/v1/payment-links/{linkId}/summary" \
-H "Authorization: Bearer $BILLINGMART_API_KEY"
payment links
Views
GET/v1/payment-links/{linkId}/views
Who opened a payment link: when, country, region and browser family, newest first, a page at a time by cursor. No address and no user agent is ever returned.
Errors this route can answer besides the shared ones: NOT_FOUND.
Example requestSample
curl -X GET "https://api.billingmart.com/v1/payment-links/{linkId}/views" \
-H "Authorization: Bearer $BILLINGMART_API_KEY"
payment links
Payments
GET/v1/payment-links/{linkId}/payments
The payments taken through a payment link, newest first, a page at a time by cursor: when, status, amount, any service fee and refund, and the card's brand and last four digits. The payer's receipt address is not returned. A link of another business is NOT_FOUND.
curl -X GET "https://api.billingmart.com/v1/payments/{paymentId}/receipt-pdf" \
-H "Authorization: Bearer $BILLINGMART_API_KEY"
payments
Notes
GET/v1/payments/{paymentId}/notes
The internal notes on one payment, newest first.
Scope
payments:read
Effect
Read only
MCP tool
list_payment_notes
Retries
Safe to repeat
Parameters
Notes parameters
Name
In
Type
Notes
paymentIdrequired
path
id
—
limitoptional
query
integer
min 1 · max 50
cursoroptional
query
string
up to 256 chars
Returns
data: PaymentNote[]. Pass meta.cursor back as cursor for the next page.
Example requestSample
curl -X GET "https://api.billingmart.com/v1/payments/{paymentId}/notes" \
-H "Authorization: Bearer $BILLINGMART_API_KEY"
payments
Notes
POST/v1/payments/{paymentId}/notes
Add an internal note to a payment (plain text, at most 2,000 characters). Append-only: a note is never edited or deleted, never shown to the customer, and never moves money.
Scope
payments:notes
Effect
Writes a draft or record
MCP tool
add_payment_note
Retries
Send an Idempotency-Key; a repeat replays the stored answer for 24 hours
Parameters
Notes parameters
Name
In
Type
Notes
paymentIdrequired
path
id
—
Request body
JSON. Money is an integer count of minor units beside its currency; quantities are thousandths.
curl -X GET "https://api.billingmart.com/v1/admin/rate-requests" \
-H "Authorization: Bearer $BILLINGMART_API_KEY"
merchant accounts
List
GET/v1/admin/merchant-accounts
The workspace’s merchant accounts: each one’s id and label, whether it is the default or archived, whether test and live are set up, whether its self-tests passed, whether live is activated, and whether it charges live or test right now. Use an id as `merchantAccountId` on a draft invoice. Yes-or-no answers and the label only; never a credential, a producer id, a host or a timestamp. Credentials are entered only by a person in the console.
curl -X GET "https://api.billingmart.com/v1/admin/merchant-accounts" \
-H "Authorization: Bearer $BILLINGMART_API_KEY"
gateway status
Get
GET/v1/admin/gateway-status
Whether the payment gateway is set up: booleans only (test and live configured, self-tests passed, live activated). Never a credential, id or host.
Scope
admin:read
Effect
Read only
MCP tool
get_gateway_status
Retries
Safe to repeat
Returns
data: GatewayStatus
Example requestSample
curl -X GET "https://api.billingmart.com/v1/admin/gateway-status" \
-H "Authorization: Bearer $BILLINGMART_API_KEY"
Object
Payment
One payment attempt and its outcome. THE MOST SECURITY-CONSTRAINED DOCUMENT IN THE CONTRACT. PAN and CVV exist only as local variables inside the charging function and appear NOWHERE in this schema — the only card digits persisted are cardLast4 and cardType.
Payment fields
Field
Type
Notes
idrequired
Id
—
tenantrequired
TenantRef
—
invoiceIdoptional
Id
The invoice this payment settles. OPTIONAL: a payment-link payment has none and names paymentLinkId instead; exactly one of the two is set.
paymentLinkIdoptional
Id
The payment link this payment was taken through, when it settles no invoice.
linkCheckoutIdoptional
string
The checkout (the payer's seat) the payment was made under.
receiptEmailoptional
string
M2c: where a payment-link payer asked for the receipt. One address, typed by the payer, used for that ONE receipt and nothing else: it grants no portal, client record, verification or marketing.
clientIdoptional
Id
—
statusrequired
PaymentStatus
—
methodrequired
PaymentMethod
—
amountrequired
Money
The amount applied to the invoice. amountDue`, derived from the stored line items at save and send and moved by each ledger posting), so a payment never applies more than is due.
serviceFeeoptional
Money
The pass-through fee the payer paid on top of amount for a card payment, computed once at claim from amount and the workspace's rate (integer, half away from zero) and stored, so a replay or a capture never recomput…
serviceFeeBpsoptional
BasisPoints
The rate serviceFee was computed at.
serviceFeeLabeloptional
ServiceFeeLabel
—
idempotencyKeyoptional
string
Identifies one payment ATTEMPT: a retry with the same key replays that attempt and never charges twice. This key plus a time-boxed processing lease are claimed in a transaction before the gateway is touched.
leaseExpiresAtoptional
IsoTimestamp
The processing lease. Time-boxed so a crashed attempt cannot wedge an invoice permanently.
gatewayRequestedAtoptional
IsoTimestamp
Stamped the moment before the request leaves for the gateway.
cardLast4optional
string
The ONLY card digits ever persisted.
cardTypeoptional
string
—
saveMethodRequestedoptional
boolean
The customer ticked "save this card" on the pay page after reading the consent copy. A request, not a vault: reads it when it tokenises. Never a card number.
achLast4optional
string
Last four of the account number. The routing number is not persisted.
vaultCustomerIdoptional
string
Tenant-scoped TranzPay CustomerID. Not a replayable card token.
merchantAccountIdoptional
Id
The merchant account that took this payment, written by the function that called the gateway. A void, refund or ACH return that arrives later goes to this account, never to whichever account is the default now.
gatewayTransactionIdoptional
string
—
initiatedByoptional
ChargeInitiator
For a charge of a SAVED method: who started it. Absent on every other payment and on records older than.
gatewayResponseoptional
GatewayOutcome
—
pendingReversaloptional
PendingReversal
—
failureReasonoptional
string
Human-readable, already masked. Never the raw gateway body.
settledAtoptional
IsoTimestamp
Settlement is POLLED — there are no webhooks.
returnedAtoptional
IsoTimestamp
An ACH return, arriving days after the debit. This is what takes an invoice out of paid.
returnCodeoptional
string
The NACHA return code, e.g. R01.
refundedAmountoptional
Money
—
doubleCreditoptional
DoubleCredit
—
disputeoptional
PaymentDispute
PR B: the card dispute on this payment, when the customer's bank disputed it. At most one per payment. Written only by the dispute callables (function-written, like the rest of the payment).
voidAfterReturnoptional
VoidAfterReturn
—
recordedByoptional
Id
For cash / check / bankTransfer, the staff uid that recorded it, taken from the verified token.
referenceoptional
string
Untrusted textFor staff-recorded payments: the check number, transfer id or receipt the tenant keeps. With the amount it is the idempotency key of recordOfflinePayment — the same reference and amount twice records one payment.
receiptIdoptional
Id
The receipt this payment is one allocation of — Receive payment applies one amount across several invoices and writes a payment per invoice, each naming the receipt.
authorizationoptional
PaymentAuthorization
The customer's authorisation for THIS charge, captured on the pay page before the gateway was called: the sentence they agreed to, the signature they gave, and the request metadata the SERVER observed.
entryModeoptional
enum
How the card details reached BillingMart.
processedByoptional
PaymentProcessedBy
—
callerPhoneoptional
PhoneE164
Untrusted textThe phone number of the caller who gave the card, required for every phone payment and normalized server-side.
receiptDeliveryoptional
PaymentReceiptDelivery
—
createdAtrequired
IsoTimestamp
—
updatedAtoptional
IsoTimestamp
—
Object
PaymentLink
A payment link's CONFIGURATION: what a payer may pay through a shared URL or QR code without an invoice.
PaymentLink fields
Field
Type
Notes
idrequired
Id
—
tenantIdrequired
Id
—
businessIdoptional
Id
The business whose name, logo and theme the page shows. Absent: the workspace's first business.
merchantAccountIdoptional
Id
The merchant account this link takes payments through, fixed when the link is created. Absent means the business default, then the workspace default account.
kindrequired
PaymentLinkKind
—
presetrequired
PaymentLinkPreset
—
customNameoptional
string
Untrusted textThe API and MCP return it inside the untrusted-data envelope.
currencyrequired
Currency
—
pricingrequired
PaymentLinkPricing
—
fixedAmountoptional
Money
The price, when pricing is fixed.
minAmountoptional
Money
The least a payer may pay, when pricing is range. Never below the platform floor (PAYMENT_LINK_MIN_MINOR), which keeps a public any-amount link from testing cards a cent at a time.
maxAmountoptional
Money
The most a payer may pay, when pricing is range. Absent: no upper bound beyond the gateway's.
tiersoptional
PaymentLinkTier[]
When pricing is tiered: the price by payment sequence, upTo strictly ascending, the last one no later than maxPayments. Payment number n pays the first tier whose upTo is at least n.
maxPaymentsoptional
integer
How many payments the link takes in all. Absent: no cap. A one-time link is exactly 1.
displayAvailabilityrequired
boolean
Whether the payer's page shows how many remain. Off: the snapshot carries no count at all.
feeoptional
PaymentLinkFee
Optional per-link fee the payer pays on top of the price, disclosed before payment and itemised on the receipt. Accepted only on a workspace enabled for fees.
paymentCountrequired
integer
SERVER-WRITTEN. Payments that succeeded (or ACH payments accepted and not returned).
reservedCountrequired
integer
SERVER-WRITTEN. Seats held by checkouts whose lease has not ended.
statusrequired
PaymentLinkStatus
—
tokenrequired
string
The live public token (paymentLinkTokens/{token}). Rotating it revokes the previous one.
expiresAtoptional
IsoTimestamp
Optional: after this the link takes nothing.
configVersionrequired
integer
Bumped by every edit. A checkout records the version it priced against.
createdAtrequired
IsoTimestamp
—
createdByrequired
Id
The uid from the verified ID token.
updatedAtrequired
IsoTimestamp
—
updatedByrequired
Id
The uid from the verified ID token.
Object
PaymentLinkSummary
PaymentLinkSummary is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns.
Object
PaymentLinkViews
PaymentLinkViews is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns.
Object
PaymentLinkPayments
PaymentLinkPayments is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns.
Object
PaymentNote
An INTERNAL note on one payment: staff text for the workspace, never shown to the customer and never on a receipt. Read by the members who can read the payment; written ONLY by the `addPaymentNote` callable (and its REST/MCP twin), which takes the author from the verified token and audits it.
PaymentNote fields
Field
Type
Notes
idrequired
Id
—
tenantrequired
TenantRef
Copied from the payment, so a member confined to some businesses reads a note exactly when they can read its payment.
paymentIdrequired
Id
—
textrequired
string
Untrusted textPLAIN TEXT written by a member or a connection; rendered as text, never markup, and returned by the API and MCP inside the untrusted-data envelope.
authorUidrequired
Id
The member who wrote it, from the verified ID token — never from the payload.
viaoptional
enum
Where it was written: a person in the console or an app, or a connection (API key or MCP grant) acting for authorUid.
credentialIdoptional
Id
The API key or OAuth grant that wrote it, when via is api.
createdAtrequired
IsoTimestamp
—
Object
SavedPaymentMethod
A handle on an instrument TRANZPAY HOLDS, not an instrument we hold. THERE IS NOWHERE IN THIS SCHEMA TO PUT A PAN, A CVV, A ROUTING NUMBER OR AN ACCOUNT NUMBER — deliberately, in all three generated languages, so no code can accidentally persist one.
SavedPaymentMethod fields
Field
Type
Notes
idrequired
Id
—
tenantrequired
TenantRef
—
clientIdrequired
Id
Whose method this is. A method is never offered to another client, even inside one tenant.
methodrequired
PaymentMethod
card or ach. 1 trap all over again.
vaultCustomerIdrequired
string
The TranzPay CustomerID. CALLER-SUPPLIED, so it is derived from the tenant and the client: re-vaulting the same instrument is idempotent, and the id means nothing in another tenant.
merchantAccountIdoptional
Id
The merchant account whose vault holds this method. A saved method can be charged only through this account; an invoice routed to another account asks the customer for the card again.
labeloptional
string
Untrusted textReturned inside the data envelope by every API and MCP response.
cardLast4optional
string
The last four digits: the only part of the card NUMBER ever stored. It sits beside cardType and the expiry month and year (expMonth, expYear), which are not enough to charge the card.
cardTypeoptional
string
—
expMonthoptional
integer
For display and for warning before a card expires. Not a secret, and not enough to charge with.
expYearoptional
integer
—
achLast4optional
string
Last four of the account number. THE ROUTING NUMBER IS NOT PERSISTED — together they are the credential that moves money.
bankAccountTypeoptional
BankAccountType
Display only here; the wire builders map it to each operation's own spelling.
consentAtoptional
IsoTimestamp
When the customer agreed this method could be kept. Saving a method and permitting a recurring charge on it are two different permissions — the second one is recurring.autopay.consentAt.
consentVersionoptional
string
Which wording the customer ticked to keep this card.
consentTextoptional
string
Untrusted textThe COMPLETE words of the save-this-card tick, rebuilt by the SERVER from consentVersion and the business name; never taken from the client.
consentTextHashoptional
string
SHA-256 (hex) of consentText, written by the server, so the stored wording can be shown unchanged.
consentClientAtoptional
IsoTimestamp
The customer's own clock when they pressed Pay with the tick set. Corroboration beside the authoritative consentAt (the server's time), never instead of it.
needsUpdateoptional
boolean
Set when a NOC says the bank corrected this account. Nothing keeps silently debiting a corrected account: the method is flagged and a human is told.
needsUpdateCodeoptional
string
The NOC change code that raised needsUpdate, e.g. C01.
lastUsedAtoptional
IsoTimestamp
—
archivedAtoptional
IsoTimestamp
Archived, never deleted: active is archivedAt absent. A payment names the method that paid it, and deleting the method would orphan the record of how money moved.
createdByoptional
Id
From the verified ID token when a staff member saved it; absent when the customer saved it on the pay page.
createdAtrequired
IsoTimestamp
—
updatedAtoptional
IsoTimestamp
—
Object
MerchantApplicationSummary
What the applicant's workspace sees of its merchant application after submitting: the status and nothing it submitted, by owner decision. Function-written; owners and admins of the workspace read it; nobody writes it.
MerchantApplicationSummary fields
Field
Type
Notes
idrequired
Id
—
tenantIdrequired
Id
—
statusrequired
MerchantApplicationStatus
—
dbarequired
string
Untrusted textThe business name, so the list can tell two applications apart.
submittedAtrequired
IsoTimestamp
—
updatedAtrequired
IsoTimestamp
—
producerIdoptional
string
Present once approved.
Object
RateRequestSummary
. What the workspace sees of its rate request: the status, the business name, the dates, the platform's quote once given, and the application it became. Function-written; owners and admins of the workspace read it; nobody writes it.
RateRequestSummary fields
Field
Type
Notes
idrequired
Id
—
tenantIdrequired
Id
—
statusrequired
RateRequestStatus
—
dbarequired
string
Untrusted textThe business name, so the list can tell two requests apart.
submittedAtrequired
IsoTimestamp
—
updatedAtrequired
IsoTimestamp
—
passThroughFeesRequestedrequired
boolean
—
quoteoptional
RateQuote
—
applicationIdoptional
Id
Present once converted.
Object
MerchantAccountView
MerchantAccountView is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns.
Next section
Recurring and automation
Schedules that raise invoices on their own, the reminder cadence, and what the scheduled jobs will do next.
We use Google Analytics on our website by default to understand visits. Choose Decline to turn it off; you can change this at any time on the Cookies page. We never send Google your name, email or account. Cookie policy