DevelopersAPI reference

Payments API

REST endpoints for payments in SKUFlow: 7 operations with parameters, request and response fields, permissions and curl examples.

Base URL: https://app.skuflow.ai/api. Every call needs Authorization: Bearer skf_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.

OperationEndpointRisk
List payments with totalsGET /organizations/{organizationId}/paymentsread
Export payments as CSVGET /organizations/{organizationId}/payments/exportread
Get a payment with its refundsGET /organizations/{organizationId}/payments/{paymentId}read
Record a payment on an invoice (moves money)POST /organizations/{organizationId}/invoices/{invoiceId}/paymentssensitive
A quote's deposit: requested, collected, outstandingGET /organizations/{organizationId}/quotes/{quoteId}/depositsread
Record a deposit on an approved quote (moves money)POST /organizations/{organizationId}/quotes/{quoteId}/depositssensitive
Refund a payment (moves money back)POST /organizations/{organizationId}/payments/{paymentId}/refundssensitive

List payments with totals

GET /organizations/{organizationId}/payments

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 SKUFlow fee). Online payments show PENDING until Stripe confirms them and FAILED when declined or abandoned. Read-only.

Permissionpayments.read (Owner, Admin, Staff)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolpayments_list (toolset invoices, in the default set)

Parameters

NameInTypeRequiredDescription
queryquerystringNoMatches PAY-n, the reference, the customer's name or the invoice number. Up to 200 characters.
methodqueryenumNoHow 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.
processorqueryenumNoManual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
statusqueryenumNoSUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
fromquerystringNoPaid on or after (YYYY-MM-DD).
toquerystringNoPaid on or before (YYYY-MM-DD).
customerIdquerystringNo
invoiceIdquerystringNo
quoteIdquerystringNoDeposits taken on this quote.
limitqueryintegerNoPage size, 1–200. Default 50.
offsetqueryintegerNoRows to skip; the answer's total counts every match. Default 0.

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payments" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
itemsarray of object
items[].idstring
items[].identifierstringPAY-n, unique per organization.
items[].customerIdstring
items[].customerobject
items[].customer.idstring
items[].customer.namestring
items[].invoiceIdstring or null
items[].invoiceobject or null
items[].invoice.idstring
items[].invoice.identifierstring
items[].invoice.statusstring
items[].quoteIdstring or nullSet when the payment was a deposit on a quote.
items[].quoteobject or null
items[].quote.idstring
items[].quote.identifierstring
items[].quote.titlestring
items[].amountCentsinteger
items[].tipCentsinteger
items[].refundedCentsintegerSucceeded refunds so far.
items[].methodenumHow 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[].paidOnstring
items[].referencestring or null
items[].notestring or null
items[].processorenumManual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
items[].processorPaymentIdstring or nullStripe PaymentIntent (pi_…).
items[].processorChargeIdstring or null
items[].processorAccountIdstring or nullThe connected Stripe account it was paid into.
items[].processorChargeTypeenum or nullHow 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[].processorSessionIdstring or nullThe Stripe Checkout Session (cs_…).
items[].processorFeeCentsinteger or nullStripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
items[].platformFeeCentsinteger or nullSKUFlow's fee on this online payment: 0 or null (SKUFlow takes no fee).
items[].feesCentsintegerFees the business paid on this payment: Stripe's processing fee (direct charges) plus any SKUFlow fee.
items[].netCentsintegerWhat reaches the business: amount + tip − feesCents (before refunds).
items[].paymentMethodTypestring or nullcard | us_bank_account for online payments.
items[].cardBrandstring or null
items[].cardLast4string or null
items[].methodLabelstring or nullVisa •••• 4242, Bank •••• 6789 (online payments).
items[].onlineChannelenum or nullWhere an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY, STORE.
items[].disputedbooleanThe customer's bank opened a dispute (chargeback).
items[].disputeStatusstring or null
items[].failureReasonstring or null
items[].statusenumSUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
items[].recordedByobject or null
items[].recordedBy.idstring
items[].recordedBy.namestring or null
items[].refundsarray of object
items[].refunds[].idstring
items[].refunds[].paymentIdstring
items[].refunds[].amountCentsinteger
items[].refunds[].reasonstring or null
items[].refunds[].refundedOnstring
items[].refunds[].processorenumOne of MANUAL, STRIPE.
items[].refunds[].processorRefundIdstring or nullStripe's refund id (re_…) for online refunds.
items[].refunds[].statusenumOnline refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
items[].refunds[].failureReasonstring or null
items[].refunds[].recordedByobject or null
items[].refunds[].createdAtstring (date-time)
items[].createdAtstring (date-time)
items[].updatedAtstring (date-time)
totalinteger
totalsobject
totals.countinteger
totals.amountCentsinteger
totals.tipCentsinteger
totals.refundedCentsinteger
totals.collectedCentsintegerAmounts received less refunds, tips excluded: what counts as revenue.
totals.netTipCentsintegerTips received less refunds that reached them.
totals.netCentsinteger
totals.feesCentsintegerOnline-payment fees the business paid: Stripe's processing fees (billed by Stripe) plus any SKUFlow fee.

Export payments as CSV

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.

Permissionpayments.read (Owner, Admin, Staff)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolpayments_export (toolset invoices)

Parameters

NameInTypeRequiredDescription
queryquerystringNoMatches PAY-n, the reference, the customer's name or the invoice number. Up to 200 characters.
methodqueryenumNoHow 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.
processorqueryenumNoManual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
statusqueryenumNoSUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
fromquerystringNoPaid on or after (YYYY-MM-DD).
toquerystringNoPaid on or before (YYYY-MM-DD).
customerIdquerystringNo
invoiceIdquerystringNo
quoteIdquerystringNo

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payments/export" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
fileNamestring
csvstringUTF-8 CSV with a header row.
countintegerPayments in the file.

Get a payment with its refunds

GET /organizations/{organizationId}/payments/{paymentId}

One payment, its invoice or quote, who recorded it, and every refund on it. Read-only.

Permissionpayments.read (Owner, Admin, Staff)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolpayments_get (toolset invoices)

Parameters

NameInTypeRequiredDescription
paymentIdpathstringYes

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payments/{paymentId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
idstring
identifierstringPAY-n, unique per organization.
customerIdstring
customerobject
customer.idstring
customer.namestring
invoiceIdstring or null
invoiceobject or null
invoice.idstring
invoice.identifierstring
invoice.statusstring
quoteIdstring or nullSet when the payment was a deposit on a quote.
quoteobject or null
quote.idstring
quote.identifierstring
quote.titlestring
amountCentsinteger
tipCentsinteger
refundedCentsintegerSucceeded refunds so far.
methodenumHow 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.
paidOnstring
referencestring or null
notestring or null
processorenumManual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
processorPaymentIdstring or nullStripe PaymentIntent (pi_…).
processorChargeIdstring or null
processorAccountIdstring or nullThe connected Stripe account it was paid into.
processorChargeTypeenum or nullHow 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.
processorSessionIdstring or nullThe Stripe Checkout Session (cs_…).
processorFeeCentsinteger or nullStripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
platformFeeCentsinteger or nullSKUFlow's fee on this online payment: 0 or null (SKUFlow takes no fee).
feesCentsintegerFees the business paid on this payment: Stripe's processing fee (direct charges) plus any SKUFlow fee.
netCentsintegerWhat reaches the business: amount + tip − feesCents (before refunds).
paymentMethodTypestring or nullcard | us_bank_account for online payments.
cardBrandstring or null
cardLast4string or null
methodLabelstring or nullVisa •••• 4242, Bank •••• 6789 (online payments).
onlineChannelenum or nullWhere an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY, STORE.
disputedbooleanThe customer's bank opened a dispute (chargeback).
disputeStatusstring or null
failureReasonstring or null
statusenumSUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
recordedByobject or null
recordedBy.idstring
recordedBy.namestring or null
refundsarray of object
refunds[].idstring
refunds[].paymentIdstring
refunds[].amountCentsinteger
refunds[].reasonstring or null
refunds[].refundedOnstring
refunds[].processorenumOne of MANUAL, STRIPE.
refunds[].processorRefundIdstring or nullStripe's refund id (re_…) for online refunds.
refunds[].statusenumOnline refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
refunds[].failureReasonstring or null
refunds[].recordedByobject or null
refunds[].recordedBy.idstring
refunds[].recordedBy.namestring or null
refunds[].createdAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)

Record a payment on an invoice (moves money)

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, staff). 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.

Permissionpayments.record (Owner, Admin, Staff)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolpayments_record (toolset invoices, in the default set)
ApprovalOver MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals.

Parameters

NameInTypeRequiredDescription
invoiceIdpathstringYes

Request body

FieldTypeRequiredDescription
amountCentsintegerYesAmount towards the balance, in integer cents. Must not exceed the balance due (overpayment is refused). 1–100000000.
tipCentsintegerNoTip on top of the amount, in cents. Never reduces the balance; reported apart from revenue. 0–100000000.
methodenumYesHow 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.
paidOnempty string or string or nullNoThe day the money was received (YYYY-MM-DD); defaults to today.
referencestring or nullNoCheck number, card last four or transfer reference, if any. Up to 200 characters.
notestring or nullNoInternal note; never shown to the customer. Up to 5000 characters.
todaystringNoThe business's today (YYYY-MM-DD) for defaults and due-date checks; defaults to today in UTC.
notifyCustomerbooleanNoDefault true: the business's automations (the payment receipt) run. False: nothing is sent to the customer for this payment.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/invoices/{invoiceId}/payments" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amountCents":12500,"method":"CASH"}'

Response

201: the answer's fields
FieldTypeDescription
idstring
identifierstringPAY-n, unique per organization.
customerIdstring
customerobject
customer.idstring
customer.namestring
invoiceIdstring or null
invoiceobject or null
invoice.idstring
invoice.identifierstring
invoice.statusstring
quoteIdstring or nullSet when the payment was a deposit on a quote.
quoteobject or null
quote.idstring
quote.identifierstring
quote.titlestring
amountCentsinteger
tipCentsinteger
refundedCentsintegerSucceeded refunds so far.
methodenumHow 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.
paidOnstring
referencestring or null
notestring or null
processorenumManual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
processorPaymentIdstring or nullStripe PaymentIntent (pi_…).
processorChargeIdstring or null
processorAccountIdstring or nullThe connected Stripe account it was paid into.
processorChargeTypeenum or nullHow 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.
processorSessionIdstring or nullThe Stripe Checkout Session (cs_…).
processorFeeCentsinteger or nullStripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
platformFeeCentsinteger or nullSKUFlow's fee on this online payment: 0 or null (SKUFlow takes no fee).
feesCentsintegerFees the business paid on this payment: Stripe's processing fee (direct charges) plus any SKUFlow fee.
netCentsintegerWhat reaches the business: amount + tip − feesCents (before refunds).
paymentMethodTypestring or nullcard | us_bank_account for online payments.
cardBrandstring or null
cardLast4string or null
methodLabelstring or nullVisa •••• 4242, Bank •••• 6789 (online payments).
onlineChannelenum or nullWhere an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY, STORE.
disputedbooleanThe customer's bank opened a dispute (chargeback).
disputeStatusstring or null
failureReasonstring or null
statusenumSUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
recordedByobject or null
recordedBy.idstring
recordedBy.namestring or null
refundsarray of object
refunds[].idstring
refunds[].paymentIdstring
refunds[].amountCentsinteger
refunds[].reasonstring or null
refunds[].refundedOnstring
refunds[].processorenumOne of MANUAL, STRIPE.
refunds[].processorRefundIdstring or nullStripe's refund id (re_…) for online refunds.
refunds[].statusenumOnline refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
refunds[].failureReasonstring or null
refunds[].recordedByobject or null
refunds[].recordedBy.idstring
refunds[].recordedBy.namestring or null
refunds[].createdAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)

A quote's deposit: requested, collected, outstanding

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.

Permissionpayments.read (Owner, Admin, Staff)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolpayments_deposits (toolset invoices)

Parameters

NameInTypeRequiredDescription
quoteIdpathstringYes

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/quotes/{quoteId}/deposits" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
requestedCentsinteger
collectedCentsinteger
outstandingCentsinteger
paymentsarray of object
payments[].idstring
payments[].identifierstringPAY-n, unique per organization.
payments[].customerIdstring
payments[].customerobject
payments[].customer.idstring
payments[].customer.namestring
payments[].invoiceIdstring or null
payments[].invoiceobject or null
payments[].invoice.idstring
payments[].invoice.identifierstring
payments[].invoice.statusstring
payments[].quoteIdstring or nullSet when the payment was a deposit on a quote.
payments[].quoteobject or null
payments[].quote.idstring
payments[].quote.identifierstring
payments[].quote.titlestring
payments[].amountCentsinteger
payments[].tipCentsinteger
payments[].refundedCentsintegerSucceeded refunds so far.
payments[].methodenumHow 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[].paidOnstring
payments[].referencestring or null
payments[].notestring or null
payments[].processorenumManual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
payments[].processorPaymentIdstring or nullStripe PaymentIntent (pi_…).
payments[].processorChargeIdstring or null
payments[].processorAccountIdstring or nullThe connected Stripe account it was paid into.
payments[].processorChargeTypeenum or nullHow 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[].processorSessionIdstring or nullThe Stripe Checkout Session (cs_…).
payments[].processorFeeCentsinteger or nullStripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
payments[].platformFeeCentsinteger or nullSKUFlow's fee on this online payment: 0 or null (SKUFlow takes no fee).
payments[].feesCentsintegerFees the business paid on this payment: Stripe's processing fee (direct charges) plus any SKUFlow fee.
payments[].netCentsintegerWhat reaches the business: amount + tip − feesCents (before refunds).
payments[].paymentMethodTypestring or nullcard | us_bank_account for online payments.
payments[].cardBrandstring or null
payments[].cardLast4string or null
payments[].methodLabelstring or nullVisa •••• 4242, Bank •••• 6789 (online payments).
payments[].onlineChannelenum or nullWhere an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY, STORE.
payments[].disputedbooleanThe customer's bank opened a dispute (chargeback).
payments[].disputeStatusstring or null
payments[].failureReasonstring or null
payments[].statusenumSUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
payments[].recordedByobject or null
payments[].recordedBy.idstring
payments[].recordedBy.namestring or null
payments[].refundsarray of object
payments[].refunds[].idstring
payments[].refunds[].paymentIdstring
payments[].refunds[].amountCentsinteger
payments[].refunds[].reasonstring or null
payments[].refunds[].refundedOnstring
payments[].refunds[].processorenumOne of MANUAL, STRIPE.
payments[].refunds[].processorRefundIdstring or nullStripe's refund id (re_…) for online refunds.
payments[].refunds[].statusenumOnline refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
payments[].refunds[].failureReasonstring or null
payments[].refunds[].recordedByobject or null
payments[].refunds[].createdAtstring (date-time)
payments[].createdAtstring (date-time)
payments[].updatedAtstring (date-time)

Record a deposit on an approved quote (moves money)

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) the deposits move onto that invoice and count as paid there. Returns the payment.

Permissionpayments.record (Owner, Admin, Staff)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolpayments_recordDeposit (toolset invoices)
ApprovalOver MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals.

Parameters

NameInTypeRequiredDescription
quoteIdpathstringYes

Request body

FieldTypeRequiredDescription
amountCentsintegerYesAmount towards the balance, in integer cents. Must not exceed the balance due (overpayment is refused). 1–100000000.
tipCentsintegerNoTip on top of the amount, in cents. Never reduces the balance; reported apart from revenue. 0–100000000.
methodenumYesHow 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.
paidOnempty string or string or nullNoThe day the money was received (YYYY-MM-DD); defaults to today.
referencestring or nullNoCheck number, card last four or transfer reference, if any. Up to 200 characters.
notestring or nullNoInternal note; never shown to the customer. Up to 5000 characters.
todaystringNoThe business's today (YYYY-MM-DD) for defaults and due-date checks; defaults to today in UTC.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/quotes/{quoteId}/deposits" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amountCents":12500,"method":"CASH"}'

Response

201: the answer's fields
FieldTypeDescription
idstring
identifierstringPAY-n, unique per organization.
customerIdstring
customerobject
customer.idstring
customer.namestring
invoiceIdstring or null
invoiceobject or null
invoice.idstring
invoice.identifierstring
invoice.statusstring
quoteIdstring or nullSet when the payment was a deposit on a quote.
quoteobject or null
quote.idstring
quote.identifierstring
quote.titlestring
amountCentsinteger
tipCentsinteger
refundedCentsintegerSucceeded refunds so far.
methodenumHow 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.
paidOnstring
referencestring or null
notestring or null
processorenumManual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
processorPaymentIdstring or nullStripe PaymentIntent (pi_…).
processorChargeIdstring or null
processorAccountIdstring or nullThe connected Stripe account it was paid into.
processorChargeTypeenum or nullHow 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.
processorSessionIdstring or nullThe Stripe Checkout Session (cs_…).
processorFeeCentsinteger or nullStripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
platformFeeCentsinteger or nullSKUFlow's fee on this online payment: 0 or null (SKUFlow takes no fee).
feesCentsintegerFees the business paid on this payment: Stripe's processing fee (direct charges) plus any SKUFlow fee.
netCentsintegerWhat reaches the business: amount + tip − feesCents (before refunds).
paymentMethodTypestring or nullcard | us_bank_account for online payments.
cardBrandstring or null
cardLast4string or null
methodLabelstring or nullVisa •••• 4242, Bank •••• 6789 (online payments).
onlineChannelenum or nullWhere an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY, STORE.
disputedbooleanThe customer's bank opened a dispute (chargeback).
disputeStatusstring or null
failureReasonstring or null
statusenumSUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
recordedByobject or null
recordedBy.idstring
recordedBy.namestring or null
refundsarray of object
refunds[].idstring
refunds[].paymentIdstring
refunds[].amountCentsinteger
refunds[].reasonstring or null
refunds[].refundedOnstring
refunds[].processorenumOne of MANUAL, STRIPE.
refunds[].processorRefundIdstring or nullStripe's refund id (re_…) for online refunds.
refunds[].statusenumOnline refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
refunds[].failureReasonstring or null
refunds[].recordedByobject or null
refunds[].recordedBy.idstring
refunds[].recordedBy.namestring or null
refunds[].createdAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)

Refund a payment (moves money back)

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.

Permissionpayments.refund (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolpayments_refund (toolset invoices)
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Parameters

NameInTypeRequiredDescription
paymentIdpathstringYes

Request body

FieldTypeRequiredDescription
amountCentsintegerYesAmount to give back, in cents. 1–100000000.
reasonstring or nullNoWhy, for the record (internal). Up to 2000 characters.
refundedOnempty string or string or nullNoThe day the money went back (YYYY-MM-DD); defaults to today.
todaystringNoThe business's today (YYYY-MM-DD) for defaults and due-date checks; defaults to today in UTC.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payments/{paymentId}/refunds" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amountCents":12500}'

Response

201: the answer's fields
FieldTypeDescription
idstring
identifierstringPAY-n, unique per organization.
customerIdstring
customerobject
customer.idstring
customer.namestring
invoiceIdstring or null
invoiceobject or null
invoice.idstring
invoice.identifierstring
invoice.statusstring
quoteIdstring or nullSet when the payment was a deposit on a quote.
quoteobject or null
quote.idstring
quote.identifierstring
quote.titlestring
amountCentsinteger
tipCentsinteger
refundedCentsintegerSucceeded refunds so far.
methodenumHow 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.
paidOnstring
referencestring or null
notestring or null
processorenumManual: recorded by staff. STRIPE: paid online through Stripe (Checkout or autopay). One of MANUAL, STRIPE.
processorPaymentIdstring or nullStripe PaymentIntent (pi_…).
processorChargeIdstring or null
processorAccountIdstring or nullThe connected Stripe account it was paid into.
processorChargeTypeenum or nullHow 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.
processorSessionIdstring or nullThe Stripe Checkout Session (cs_…).
processorFeeCentsinteger or nullStripe's processing fee, billed by Stripe to the business (older DESTINATION payments: paid by the platform). Null until Stripe reports it.
platformFeeCentsinteger or nullSKUFlow's fee on this online payment: 0 or null (SKUFlow takes no fee).
feesCentsintegerFees the business paid on this payment: Stripe's processing fee (direct charges) plus any SKUFlow fee.
netCentsintegerWhat reaches the business: amount + tip − feesCents (before refunds).
paymentMethodTypestring or nullcard | us_bank_account for online payments.
cardBrandstring or null
cardLast4string or null
methodLabelstring or nullVisa •••• 4242, Bank •••• 6789 (online payments).
onlineChannelenum or nullWhere an online payment was started. One of PORTAL, INVOICE_LINK, QUOTE_PAGE, STAFF, AUTOPAY, STORE.
disputedbooleanThe customer's bank opened a dispute (chargeback).
disputeStatusstring or null
failureReasonstring or null
statusenumSUCCEEDED (counts), PENDING / FAILED (online payments not settled; count for nothing), PARTIALLY_REFUNDED, REFUNDED. One of SUCCEEDED, PENDING, FAILED, REFUNDED, PARTIALLY_REFUNDED.
recordedByobject or null
recordedBy.idstring
recordedBy.namestring or null
refundsarray of object
refunds[].idstring
refunds[].paymentIdstring
refunds[].amountCentsinteger
refunds[].reasonstring or null
refunds[].refundedOnstring
refunds[].processorenumOne of MANUAL, STRIPE.
refunds[].processorRefundIdstring or nullStripe's refund id (re_…) for online refunds.
refunds[].statusenumOnline refunds are PENDING until Stripe confirms them; only SUCCEEDED counts. One of SUCCEEDED, PENDING, FAILED.
refunds[].failureReasonstring or null
refunds[].recordedByobject or null
refunds[].recordedBy.idstring
refunds[].recordedBy.namestring or null
refunds[].createdAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)

On this page