REST endpoints for online payments in ServFlo: 9 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.
GET /organizations/{organizationId}/payment-account
Whether this business can take card and bank payments online: the server's Stripe configuration (never the key), the business's connected Stripe account's state (charges and payouts enabled, requirements still due, payout schedule) and the business's switches (online payments, partial payments, tips). Read-only; does not call Stripe (POST /payment-account/refresh does).
Deprecated: the card rate of ServFlo's fee in basis points (0); see platformFees.
config.platformFees
object
ServFlo's fee on each online payment: none by default (none). Stripe's own processing fees are billed by Stripe to the business.
config.platformFees.none
boolean
ServFlo takes no fee on any payment (the default); Stripe bills its processing fees to the business.
config.platformFees.cardBps
integer
Card: basis points of amount + tip (0 by default).
config.platformFees.cardFixedCents
integer
Card: fixed cents per payment.
config.platformFees.achBps
integer
US bank account (ACH): basis points.
config.platformFees.achCapCents
integer
US bank account (ACH): the most the fee can be.
config.platformFees.card
string
The card rate as shown, e.g. "3.2% + 30¢".
config.platformFees.ach
string
The ACH rate as shown, e.g. "1%, max $10".
config.platformFees.financingBps
integer
Affirm and Klarna: basis points.
config.platformFees.financingFixedCents
integer
Affirm and Klarna: fixed cents.
config.platformFees.financing
string
The financing rate as shown, e.g. "7% + 30¢".
state
enum
NOT_CONNECTED: no Stripe account; ONBOARDING: details not submitted; RESTRICTED: Stripe wants more or paused charges; ACTIVE: charges enabled. One of NOT_CONNECTED, ONBOARDING, RESTRICTED, ACTIVE.
availability
object
availability.available
boolean
availability.reason
enum or null
Why customers cannot pay online: the server has no Stripe key, no account is connected, Stripe has not enabled charges yet, or the business turned online payments off. One of NOT_CONFIGURED, NOT_CONNECTED, NOT_ENABLED, TURNED_OFF.
account
object or null
account.stripeAccountId
string or null
The business's connected Stripe account (acct_…), with its own full Stripe dashboard.
account.livemode
boolean
account.dashboardType
string or null
The Stripe dashboard the account has: full (every account set up now).
account.lossesCollector
string or null
Who carries losses on payments: stripe (Managed Risk).
account.feesPayer
string or null
Who pays Stripe's processing fees: account (the business).
Destructive: unlinks the connected Stripe account. Pay online buttons disappear and saved customer cards stop being charged for memberships (autopay off). The account is the business's own and stays at Stripe (its balance still pays out); earlier online payments can still be refunded while Stripe lets ServFlo reach the account, else from the Stripe dashboard. Setting up again creates a new account.
Permission
payments.manage (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
paymentAccount_disconnect (toolset invoices)
Approval
Waits for your approval in ServFlo when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-ServFlo-Approval header. See Approvals.
Deprecated: the card rate of ServFlo's fee in basis points (0); see platformFees.
config.platformFees
object
ServFlo's fee on each online payment: none by default (none). Stripe's own processing fees are billed by Stripe to the business.
config.platformFees.none
boolean
ServFlo takes no fee on any payment (the default); Stripe bills its processing fees to the business.
config.platformFees.cardBps
integer
Card: basis points of amount + tip (0 by default).
config.platformFees.cardFixedCents
integer
Card: fixed cents per payment.
config.platformFees.achBps
integer
US bank account (ACH): basis points.
config.platformFees.achCapCents
integer
US bank account (ACH): the most the fee can be.
config.platformFees.card
string
The card rate as shown, e.g. "3.2% + 30¢".
config.platformFees.ach
string
The ACH rate as shown, e.g. "1%, max $10".
config.platformFees.financingBps
integer
Affirm and Klarna: basis points.
config.platformFees.financingFixedCents
integer
Affirm and Klarna: fixed cents.
config.platformFees.financing
string
The financing rate as shown, e.g. "7% + 30¢".
state
enum
NOT_CONNECTED: no Stripe account; ONBOARDING: details not submitted; RESTRICTED: Stripe wants more or paused charges; ACTIVE: charges enabled. One of NOT_CONNECTED, ONBOARDING, RESTRICTED, ACTIVE.
availability
object
availability.available
boolean
availability.reason
enum or null
Why customers cannot pay online: the server has no Stripe key, no account is connected, Stripe has not enabled charges yet, or the business turned online payments off. One of NOT_CONFIGURED, NOT_CONNECTED, NOT_ENABLED, TURNED_OFF.
account
object or null
account.stripeAccountId
string or null
The business's connected Stripe account (acct_…), with its own full Stripe dashboard.
account.livemode
boolean
account.dashboardType
string or null
The Stripe dashboard the account has: full (every account set up now).
account.lossesCollector
string or null
Who carries losses on payments: stripe (Managed Risk).
account.feesPayer
string or null
Who pays Stripe's processing fees: account (the business).
POST /organizations/{organizationId}/payment-account/onboarding
GRANTS ACCESS / MONEY: creates the business's own Stripe account on first use (a connected account with a full Stripe dashboard where Stripe carries losses and bills its processing fees to the business; country US; card payments, transfers and ACH debits requested) and returns a fresh Stripe-hosted onboarding link (Account Link, valid for minutes) to send the owner to, where they also create their Stripe login. Stripe returns them to Settings → Payments. Calling it again continues setup on the same account. Needs payments.manage (owners and admins).
Permission
payments.manage (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
paymentAccount_onboard (toolset invoices)
Approval
Waits for your approval in ServFlo when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-ServFlo-Approval header. See Approvals.
POST /organizations/{organizationId}/payment-account/refresh
Asks Stripe for the connected account's current standing (charges and payouts enabled, requirements due, payout schedule) and stores it; webhooks do the same automatically. Returns the same shape as GET /payment-account.
Permission
payments.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
Deprecated: the card rate of ServFlo's fee in basis points (0); see platformFees.
config.platformFees
object
ServFlo's fee on each online payment: none by default (none). Stripe's own processing fees are billed by Stripe to the business.
config.platformFees.none
boolean
ServFlo takes no fee on any payment (the default); Stripe bills its processing fees to the business.
config.platformFees.cardBps
integer
Card: basis points of amount + tip (0 by default).
config.platformFees.cardFixedCents
integer
Card: fixed cents per payment.
config.platformFees.achBps
integer
US bank account (ACH): basis points.
config.platformFees.achCapCents
integer
US bank account (ACH): the most the fee can be.
config.platformFees.card
string
The card rate as shown, e.g. "3.2% + 30¢".
config.platformFees.ach
string
The ACH rate as shown, e.g. "1%, max $10".
config.platformFees.financingBps
integer
Affirm and Klarna: basis points.
config.platformFees.financingFixedCents
integer
Affirm and Klarna: fixed cents.
config.platformFees.financing
string
The financing rate as shown, e.g. "7% + 30¢".
state
enum
NOT_CONNECTED: no Stripe account; ONBOARDING: details not submitted; RESTRICTED: Stripe wants more or paused charges; ACTIVE: charges enabled. One of NOT_CONNECTED, ONBOARDING, RESTRICTED, ACTIVE.
availability
object
availability.available
boolean
availability.reason
enum or null
Why customers cannot pay online: the server has no Stripe key, no account is connected, Stripe has not enabled charges yet, or the business turned online payments off. One of NOT_CONFIGURED, NOT_CONNECTED, NOT_ENABLED, TURNED_OFF.
account
object or null
account.stripeAccountId
string or null
The business's connected Stripe account (acct_…), with its own full Stripe dashboard.
account.livemode
boolean
account.dashboardType
string or null
The Stripe dashboard the account has: full (every account set up now).
account.lossesCollector
string or null
Who carries losses on payments: stripe (Managed Risk).
account.feesPayer
string or null
Who pays Stripe's processing fees: account (the business).
POST /organizations/{organizationId}/payment-account/dashboard-link
Returns the address of the Stripe dashboard (https://dashboard.stripe.com/), where the business signs in with the Stripe login it created during onboarding (balance, payouts, bank account, tax forms, disputes). No login link is made: the business has a full Stripe account of its own. Only once onboarding details are submitted (409 before). Needs payments.manage.
Permission
payments.manage (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
paymentAccount_dashboardLink (toolset invoices)
Approval
Over MCP, this tool always waits for your approval in ServFlo. See Approvals.
Exposes to customers:onlinePaymentsEnabled shows or hides every Pay online / Pay deposit button (portal, /i and /q pages) without disconnecting Stripe; allowPartialPayments lets customers pay part of an invoice (default off: the balance); tipsEnabled offers a tip on the pay page (default off); financingEnabled offers Affirm and/or Klarna (financingAffirm, financingKlarna) from financingMinCents up, and asks Stripe for those capabilities (if Stripe refuses, 409 says to turn them on in the business's Stripe dashboard). Send any of them. Needs payments.manage.
Permission
payments.manage (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
paymentAccount_updateSettings (toolset invoices)
Approval
Over MCP, this tool always waits for your approval in ServFlo. See Approvals.
Deprecated: the card rate of ServFlo's fee in basis points (0); see platformFees.
config.platformFees
object
ServFlo's fee on each online payment: none by default (none). Stripe's own processing fees are billed by Stripe to the business.
config.platformFees.none
boolean
ServFlo takes no fee on any payment (the default); Stripe bills its processing fees to the business.
config.platformFees.cardBps
integer
Card: basis points of amount + tip (0 by default).
config.platformFees.cardFixedCents
integer
Card: fixed cents per payment.
config.platformFees.achBps
integer
US bank account (ACH): basis points.
config.platformFees.achCapCents
integer
US bank account (ACH): the most the fee can be.
config.platformFees.card
string
The card rate as shown, e.g. "3.2% + 30¢".
config.platformFees.ach
string
The ACH rate as shown, e.g. "1%, max $10".
config.platformFees.financingBps
integer
Affirm and Klarna: basis points.
config.platformFees.financingFixedCents
integer
Affirm and Klarna: fixed cents.
config.platformFees.financing
string
The financing rate as shown, e.g. "7% + 30¢".
state
enum
NOT_CONNECTED: no Stripe account; ONBOARDING: details not submitted; RESTRICTED: Stripe wants more or paused charges; ACTIVE: charges enabled. One of NOT_CONNECTED, ONBOARDING, RESTRICTED, ACTIVE.
availability
object
availability.available
boolean
availability.reason
enum or null
Why customers cannot pay online: the server has no Stripe key, no account is connected, Stripe has not enabled charges yet, or the business turned online payments off. One of NOT_CONFIGURED, NOT_CONNECTED, NOT_ENABLED, TURNED_OFF.
account
object or null
account.stripeAccountId
string or null
The business's connected Stripe account (acct_…), with its own full Stripe dashboard.
account.livemode
boolean
account.dashboardType
string or null
The Stripe dashboard the account has: full (every account set up now).
account.lossesCollector
string or null
Who carries losses on payments: stripe (Managed Risk).
account.feesPayer
string or null
Who pays Stripe's processing fees: account (the business).
POST /organizations/{organizationId}/invoices/{invoiceId}/checkout
Money: for a payment taken over the phone. Creates a PENDING online payment (processor STRIPE) for the balance due (or amountCents when partial payments are on) and returns the Stripe Checkout page to enter the card on; the payment and the invoice settle when Stripe's webhook confirms it. An earlier unfinished checkout for the same invoice is expired first. 409 when the business cannot take online payments, 400 when nothing is due. To send the customer a link instead, use POST /invoices/{invoiceId}/link (its /i page has Pay online).
Amount towards the balance, in cents; defaults to the whole balance due. Less than the balance only when the business allows partial payments (at least 100). 1–100000000.
tipCents
integer
No
Tip on top, in cents; only when the business takes tips online (at most the amount). 0–100000000.
method
enum
No
How the payer pays: card (default), us_bank_account (ACH, only when the business's achEnabled), or affirm / klarna (pay over time, only when the page's financing lists it for this amount; 409 otherwise). Checkout then offers only that method. ServFlo takes no fee by default (Stripe's processing fees are billed by Stripe to the business); 400 only when a configured ServFlo fee would be the whole amount. One of card, us_bank_account, affirm, klarna.
GET /organizations/{organizationId}/customers/{customerId}/autopay
Whether the customer saved a card or bank account (from their portal) and their membership invoices are charged automatically, with the method's brand and last four. Read-only.
The business takes online payments, so a method can be saved.
reason
enum or null
Why customers cannot pay online: the server has no Stripe key, no account is connected, Stripe has not enabled charges yet, or the business turned online payments off. One of NOT_CONFIGURED, NOT_CONNECTED, NOT_ENABLED, TURNED_OFF.
Destructive: membership invoices are no longer charged automatically and the saved method is removed (detached at Stripe). The customer can save a new one from their portal. Invoices already issued are untouched.
The business takes online payments, so a method can be saved.
reason
enum or null
Why customers cannot pay online: the server has no Stripe key, no account is connected, Stripe has not enabled charges yet, or the business turned online payments off. One of NOT_CONFIGURED, NOT_CONNECTED, NOT_ENABLED, TURNED_OFF.