REST endpoints for payments in ServFlo: 7 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.servflo.ai/api. Every call needs Authorization: Bearer sfk_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
Payments newest first (by paid date), filtered by method, processor (MANUAL or STRIPE), status, date range, customer, invoice or quote, with totals over every match (not only the page): amountCents, tipCents, refundedCents of received payments, collectedCents (amounts net of refunds, tips excluded: revenue, gross of fees), netTipCents, netCents = amount + tips − refunds, and feesCents (online-payment fees the business paid: Stripe's processing fees plus any ServFlo fee). Online payments show PENDING until Stripe confirms them and FAILED when declined or abandoned. Read-only.
Matches PAY-n, the reference, the customer's name or the invoice number. Up to 200 characters.
method
query
enum
No
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
processor
query
enum
No
Manual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
status
query
enum
No
SUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
from
query
string
No
Paid on or after (YYYY-MM-DD).
to
query
string
No
Paid on or before (YYYY-MM-DD).
customerId
query
string
No
invoiceId
query
string
No
quoteId
query
string
No
Deposits taken on this quote.
limit
query
integer
No
Page size, 1–200. Default 50.
offset
query
integer
No
Rows to skip; the answer's total counts every match. Default 0.
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
items[].paidOn
string
items[].reference
string or null
items[].note
string or null
items[].processor
enum
Manual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
items[].processorPaymentId
string or null
Stripe PaymentIntent (pi_…).
items[].processorChargeId
string or null
items[].processorAccountId
string or null
The connected Stripe account it was paid into.
items[].processorChargeType
enum or null
How an online payment was charged: DIRECT on the business's own Stripe account (every payment now), DESTINATION for older payments made on the platform. One of DIRECT, DESTINATION.
items[].processorSessionId
string or null
The Stripe Checkout Session (cs_…).
items[].processorFeeCents
integer or null
Stripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
items[].platformFeeCents
integer or null
ServFlo's fee on this online payment: 0 or null (ServFlo takes no fee).
items[].feesCents
integer
Fees the business paid on this payment: Stripe's processing fee (direct charges) plus any ServFlo fee.
items[].netCents
integer
What reaches the business: amount + tip − feesCents (before refunds).
items[].paymentMethodType
string or null
card | us_bank_account for online payments.
items[].cardBrand
string or null
items[].cardLast4
string or null
items[].methodLabel
string or null
Visa •••• 4242, Bank •••• 6789 (online payments).
items[].onlineChannel
enum or null
Where an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY.
items[].disputed
boolean
The customer's bank opened a dispute (chargeback).
items[].disputeStatus
string or null
items[].failureReason
string or null
items[].status
enum
SUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
items[].recordedBy
object or null
items[].recordedBy.id
string
items[].recordedBy.name
string or null
items[].refunds
array of object
items[].refunds[].id
string
items[].refunds[].paymentId
string
items[].refunds[].amountCents
integer
items[].refunds[].reason
string or null
items[].refunds[].refundedOn
string
items[].refunds[].processor
enum
One of MANUAL, STRIPE.
items[].refunds[].processorRefundId
string or null
Stripe's refund id (re_…) for online refunds.
items[].refunds[].status
enum
Online refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
items[].refunds[].failureReason
string or null
items[].refunds[].recordedBy
object or null
items[].refunds[].createdAt
string (date-time)
items[].createdAt
string (date-time)
items[].updatedAt
string (date-time)
total
integer
totals
object
totals.count
integer
totals.amountCents
integer
totals.tipCents
integer
totals.refundedCents
integer
totals.collectedCents
integer
Amounts received less refunds, tips excluded: what counts as revenue.
totals.netTipCents
integer
Tips received less refunds that reached them.
totals.netCents
integer
totals.feesCents
integer
Online-payment fees the business paid: Stripe's processing fees (billed by Stripe) plus any ServFlo fee.
GET /organizations/{organizationId}/payments/export
The payments list as a CSV file (the Payments page's Export CSV), with the same filters as GET /payments and every matching row (up to 10,000): payment, paid on, customer, invoice, quote, method, processor, card, reference, status, amount, tip, refunded, fees, net, recorded by, note. Amounts in dollars. Read-only.
Matches PAY-n, the reference, the customer's name or the invoice number. Up to 200 characters.
method
query
enum
No
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
processor
query
enum
No
Manual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
status
query
enum
No
SUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
paidOn
string
reference
string or null
note
string or null
processor
enum
Manual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
processorPaymentId
string or null
Stripe PaymentIntent (pi_…).
processorChargeId
string or null
processorAccountId
string or null
The connected Stripe account it was paid into.
processorChargeType
enum or null
How an online payment was charged: DIRECT on the business's own Stripe account (every payment now), DESTINATION for older payments made on the platform. One of DIRECT, DESTINATION.
processorSessionId
string or null
The Stripe Checkout Session (cs_…).
processorFeeCents
integer or null
Stripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
platformFeeCents
integer or null
ServFlo's fee on this online payment: 0 or null (ServFlo takes no fee).
feesCents
integer
Fees the business paid on this payment: Stripe's processing fee (direct charges) plus any ServFlo fee.
netCents
integer
What reaches the business: amount + tip − feesCents (before refunds).
paymentMethodType
string or null
card | us_bank_account for online payments.
cardBrand
string or null
cardLast4
string or null
methodLabel
string or null
Visa •••• 4242, Bank •••• 6789 (online payments).
onlineChannel
enum or null
Where an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY.
disputed
boolean
The customer's bank opened a dispute (chargeback).
disputeStatus
string or null
failureReason
string or null
status
enum
SUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
recordedBy
object or null
recordedBy.id
string
recordedBy.name
string or null
refunds
array of object
refunds[].id
string
refunds[].paymentId
string
refunds[].amountCents
integer
refunds[].reason
string or null
refunds[].refundedOn
string
refunds[].processor
enum
One of MANUAL, STRIPE.
refunds[].processorRefundId
string or null
Stripe's refund id (re_…) for online refunds.
refunds[].status
enum
Online refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
POST /organizations/{organizationId}/invoices/{invoiceId}/payments
Money: records money the business received for this invoice (processor MANUAL; nothing is charged). amountCents must be above 0 and at most the balance due: overpayment is refused (400); add extra as tipCents. A cancelled invoice cannot take payments. When the balance reaches 0 the invoice becomes PAID with that day as its paid date; a partial payment leaves its status and reads as partially paid. Needs payments.record (owners, admins, dispatchers). The business's "Payment receipt" automation (when on) emails a receipt; notifyCustomer: false sends nothing for this payment. Get the invoice and its balanceDueCents with GET /invoices/{invoiceId} first. Returns the payment.
Amount towards the balance, in integer cents. Must not exceed the balance due (overpayment is refused). 1–100000000.
tipCents
integer
No
Tip on top of the amount, in cents. Never reduces the balance; reported apart from revenue. 0–100000000.
method
enum
Yes
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
paidOn
empty string or string or null
No
The day the money was received (YYYY-MM-DD); defaults to today.
reference
string or null
No
Check number, card last four or transfer reference, if any. Up to 200 characters.
note
string or null
No
Internal note; never shown to the customer. Up to 5000 characters.
today
string
No
The business's today (YYYY-MM-DD) for defaults and due-date checks; defaults to today in UTC.
notifyCustomer
boolean
No
Default true: the business's automations (the payment receipt) run. False: nothing is sent to the customer for this payment.
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
paidOn
string
reference
string or null
note
string or null
processor
enum
Manual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
processorPaymentId
string or null
Stripe PaymentIntent (pi_…).
processorChargeId
string or null
processorAccountId
string or null
The connected Stripe account it was paid into.
processorChargeType
enum or null
How an online payment was charged: DIRECT on the business's own Stripe account (every payment now), DESTINATION for older payments made on the platform. One of DIRECT, DESTINATION.
processorSessionId
string or null
The Stripe Checkout Session (cs_…).
processorFeeCents
integer or null
Stripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
platformFeeCents
integer or null
ServFlo's fee on this online payment: 0 or null (ServFlo takes no fee).
feesCents
integer
Fees the business paid on this payment: Stripe's processing fee (direct charges) plus any ServFlo fee.
netCents
integer
What reaches the business: amount + tip − feesCents (before refunds).
paymentMethodType
string or null
card | us_bank_account for online payments.
cardBrand
string or null
cardLast4
string or null
methodLabel
string or null
Visa •••• 4242, Bank •••• 6789 (online payments).
onlineChannel
enum or null
Where an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY.
disputed
boolean
The customer's bank opened a dispute (chargeback).
disputeStatus
string or null
failureReason
string or null
status
enum
SUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
recordedBy
object or null
recordedBy.id
string
recordedBy.name
string or null
refunds
array of object
refunds[].id
string
refunds[].paymentId
string
refunds[].amountCents
integer
refunds[].reason
string or null
refunds[].refundedOn
string
refunds[].processor
enum
One of MANUAL, STRIPE.
refunds[].processorRefundId
string or null
Stripe's refund id (re_…) for online refunds.
refunds[].status
enum
Online refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
GET /organizations/{organizationId}/quotes/{quoteId}/deposits
requestedCents is the deposit the approval asked for, collectedCents the deposits received net of refunds (applied to an invoice or not), outstandingCents what is left to collect, with the deposit payments. Read-only.
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
payments[].paidOn
string
payments[].reference
string or null
payments[].note
string or null
payments[].processor
enum
Manual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
payments[].processorPaymentId
string or null
Stripe PaymentIntent (pi_…).
payments[].processorChargeId
string or null
payments[].processorAccountId
string or null
The connected Stripe account it was paid into.
payments[].processorChargeType
enum or null
How an online payment was charged: DIRECT on the business's own Stripe account (every payment now), DESTINATION for older payments made on the platform. One of DIRECT, DESTINATION.
payments[].processorSessionId
string or null
The Stripe Checkout Session (cs_…).
payments[].processorFeeCents
integer or null
Stripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
payments[].platformFeeCents
integer or null
ServFlo's fee on this online payment: 0 or null (ServFlo takes no fee).
payments[].feesCents
integer
Fees the business paid on this payment: Stripe's processing fee (direct charges) plus any ServFlo fee.
payments[].netCents
integer
What reaches the business: amount + tip − feesCents (before refunds).
payments[].paymentMethodType
string or null
card | us_bank_account for online payments.
payments[].cardBrand
string or null
payments[].cardLast4
string or null
payments[].methodLabel
string or null
Visa •••• 4242, Bank •••• 6789 (online payments).
payments[].onlineChannel
enum or null
Where an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY.
payments[].disputed
boolean
The customer's bank opened a dispute (chargeback).
payments[].disputeStatus
string or null
payments[].failureReason
string or null
payments[].status
enum
SUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
payments[].recordedBy
object or null
payments[].recordedBy.id
string
payments[].recordedBy.name
string or null
payments[].refunds
array of object
payments[].refunds[].id
string
payments[].refunds[].paymentId
string
payments[].refunds[].amountCents
integer
payments[].refunds[].reason
string or null
payments[].refunds[].refundedOn
string
payments[].refunds[].processor
enum
One of MANUAL, STRIPE.
payments[].refunds[].processorRefundId
string or null
Stripe's refund id (re_…) for online refunds.
payments[].refunds[].status
enum
Online refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
POST /organizations/{organizationId}/quotes/{quoteId}/deposits
Money: records a deposit the customer paid on an APPROVED (or CONVERTED but not yet invoiced) quote. Deposits may add up to the approved total, never more. When the quote is invoiced (POST /quotes/{quoteId}/invoice, or invoicing the job it became) the deposits move onto that invoice and count as paid there. Returns the payment.
Amount towards the balance, in integer cents. Must not exceed the balance due (overpayment is refused). 1–100000000.
tipCents
integer
No
Tip on top of the amount, in cents. Never reduces the balance; reported apart from revenue. 0–100000000.
method
enum
Yes
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
paidOn
empty string or string or null
No
The day the money was received (YYYY-MM-DD); defaults to today.
reference
string or null
No
Check number, card last four or transfer reference, if any. Up to 200 characters.
note
string or null
No
Internal note; never shown to the customer. Up to 5000 characters.
today
string
No
The business's today (YYYY-MM-DD) for defaults and due-date checks; defaults to today in UTC.
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
paidOn
string
reference
string or null
note
string or null
processor
enum
Manual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
processorPaymentId
string or null
Stripe PaymentIntent (pi_…).
processorChargeId
string or null
processorAccountId
string or null
The connected Stripe account it was paid into.
processorChargeType
enum or null
How an online payment was charged: DIRECT on the business's own Stripe account (every payment now), DESTINATION for older payments made on the platform. One of DIRECT, DESTINATION.
processorSessionId
string or null
The Stripe Checkout Session (cs_…).
processorFeeCents
integer or null
Stripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
platformFeeCents
integer or null
ServFlo's fee on this online payment: 0 or null (ServFlo takes no fee).
feesCents
integer
Fees the business paid on this payment: Stripe's processing fee (direct charges) plus any ServFlo fee.
netCents
integer
What reaches the business: amount + tip − feesCents (before refunds).
paymentMethodType
string or null
card | us_bank_account for online payments.
cardBrand
string or null
cardLast4
string or null
methodLabel
string or null
Visa •••• 4242, Bank •••• 6789 (online payments).
onlineChannel
enum or null
Where an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY.
disputed
boolean
The customer's bank opened a dispute (chargeback).
disputeStatus
string or null
failureReason
string or null
status
enum
SUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
recordedBy
object or null
recordedBy.id
string
recordedBy.name
string or null
refunds
array of object
refunds[].id
string
refunds[].paymentId
string
refunds[].amountCents
integer
refunds[].reason
string or null
refunds[].refundedOn
string
refunds[].processor
enum
One of MANUAL, STRIPE.
refunds[].processorRefundId
string or null
Stripe's refund id (re_…) for online refunds.
refunds[].status
enum
Online refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
POST /organizations/{organizationId}/payments/{paymentId}/refunds
DESTRUCTIVE / MONEY: gives money back to the customer on this payment. At most the payment's amount plus tip, less earlier refunds, including online refunds still pending (400 otherwise); pending or failed payments cannot be refunded. The refund comes off the invoice amount first, then the tip. MANUAL payments: recorded at once (nothing is sent anywhere). STRIPE payments: refunded through Stripe to the card or bank account (the transfer to the business is reversed and the platform fee returned in proportion); the refund is PENDING until Stripe's webhook confirms it, and only then does the invoice reopen (SENT, or OVERDUE past its due date). Needs payments.refund (owners and admins; 403 for others). Find the payment with GET /payments or GET /invoices/{invoiceId}. Returns the payment with its refunds.
Permission
payments.refund (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
payments_refund (toolset invoices)
Approval
Over MCP, this tool always waits for your approval in ServFlo. See Approvals.
How the customer paid: CASH, CHECK, CARD (taken on the business's own terminal), BANK_TRANSFER or OTHER. One of CASH, CHECK, CARD, BANK_TRANSFER, OTHER.
paidOn
string
reference
string or null
note
string or null
processor
enum
Manual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
processorPaymentId
string or null
Stripe PaymentIntent (pi_…).
processorChargeId
string or null
processorAccountId
string or null
The connected Stripe account it was paid into.
processorChargeType
enum or null
How an online payment was charged: DIRECT on the business's own Stripe account (every payment now), DESTINATION for older payments made on the platform. One of DIRECT, DESTINATION.
processorSessionId
string or null
The Stripe Checkout Session (cs_…).
processorFeeCents
integer or null
Stripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
platformFeeCents
integer or null
ServFlo's fee on this online payment: 0 or null (ServFlo takes no fee).
feesCents
integer
Fees the business paid on this payment: Stripe's processing fee (direct charges) plus any ServFlo fee.
netCents
integer
What reaches the business: amount + tip − feesCents (before refunds).
paymentMethodType
string or null
card | us_bank_account for online payments.
cardBrand
string or null
cardLast4
string or null
methodLabel
string or null
Visa •••• 4242, Bank •••• 6789 (online payments).
onlineChannel
enum or null
Where an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY.
disputed
boolean
The customer's bank opened a dispute (chargeback).
disputeStatus
string or null
failureReason
string or null
status
enum
SUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
recordedBy
object or null
recordedBy.id
string
recordedBy.name
string or null
refunds
array of object
refunds[].id
string
refunds[].paymentId
string
refunds[].amountCents
integer
refunds[].reason
string or null
refunds[].refundedOn
string
refunds[].processor
enum
One of MANUAL, STRIPE.
refunds[].processorRefundId
string or null
Stripe's refund id (re_…) for online refunds.
refunds[].status
enum
Online refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.