Online payments API
REST endpoints for online payments in SKUFlow: 9 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.
| Operation | Endpoint | Risk |
|---|---|---|
| Online payments: the Stripe account and settings | GET /organizations/{organizationId}/payment-account | read |
| Disconnect the Stripe account | DELETE /organizations/{organizationId}/payment-account | sensitive |
| Set up or continue online payments (Stripe onboarding link) | POST /organizations/{organizationId}/payment-account/onboarding | sensitive |
| Refresh the Stripe account's status | POST /organizations/{organizationId}/payment-account/refresh | write |
| Open the business's Stripe dashboard | POST /organizations/{organizationId}/payment-account/dashboard-link | sensitive |
| Turn online payments, partial payments, tips or financing on or off | PATCH /organizations/{organizationId}/payment-account/settings | sensitive |
| Charge a card: open Stripe Checkout for an invoice | POST /organizations/{organizationId}/invoices/{invoiceId}/checkout | sensitive |
| A customer's saved payment method | GET /organizations/{organizationId}/customers/{customerId}/autopay | read |
| Remove a customer's saved payment method | DELETE /organizations/{organizationId}/customers/{customerId}/autopay | sensitive |
Online payments: the Stripe account and settings
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).
| Permission | payments.read (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | paymentAccount_get (toolset invoices) |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payment-account" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
config | object | |
config.configured | boolean | The server has a usable Stripe key. |
config.mode | enum or null | One of test, live. |
config.problem | string or null | |
config.missing | array of string | Environment variables still to set. |
config.webhooksConfigured | boolean | |
config.platformFeeBps | integer | Deprecated: the card rate of SKUFlow's fee in basis points (0); see platformFees. |
config.platformFees | object | SKUFlow'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 | SKUFlow 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). |
account.country | string or null | |
account.defaultCurrency | string | |
account.businessName | string or null | |
account.chargesEnabled | boolean | |
account.payoutsEnabled | boolean | |
account.detailsSubmitted | boolean | |
account.cardPaymentsStatus | string or null | |
account.achPaymentsStatus | string or null | |
account.achEnabled | boolean | Customers can pay by US bank account (ACH debit). |
account.financing | object | Affirm and Klarna. |
account.financing.enabled | boolean | Pay over time is offered. |
account.financing.affirm | boolean | |
account.financing.klarna | boolean | |
account.financing.minCents | integer | Offered from this amount up. |
account.financing.affirmStatus | string or null | Stripe's Affirm capability: null (not requested), pending, active, inactive. |
account.financing.klarnaStatus | string or null | Stripe's Klarna capability. |
account.requirementsDue | array of object | |
account.requirementsDue[].key | string | |
account.requirementsDue[].label | string | |
account.requirementsDue[].pastDue | boolean | |
account.requirementsDeadline | string (date-time) or null | |
account.disabledReason | string or null | |
account.payoutSchedule | object or null | |
account.payoutSchedule.interval | string or null | |
account.payoutSchedule.delayDays | integer or null | |
account.payoutSchedule.weeklyAnchor | string or null | |
account.payoutSchedule.monthlyAnchor | integer or null | |
account.onlinePaymentsEnabled | boolean | |
account.allowPartialPayments | boolean | |
account.tipsEnabled | boolean | |
account.connectedAt | string (date-time) or null | |
account.disconnectedAt | string (date-time) or null | |
account.lastSyncedAt | string (date-time) or null |
Disconnect the Stripe account
DELETE /organizations/{organizationId}/payment-account
Destructive: unlinks the connected Stripe account. Pay online buttons disappear and saved customer cards are switched 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 SKUFlow reach the account, else from the Stripe dashboard. Setting up again creates a new account.
| Permission | payments.manage (Owner, Admin) |
| Risk | sensitive, OAuth scope skuflow.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 SKUFlow 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-SKUFlow-Approval header. See Approvals. |
Example
curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payment-account" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
config | object | |
config.configured | boolean | The server has a usable Stripe key. |
config.mode | enum or null | One of test, live. |
config.problem | string or null | |
config.missing | array of string | Environment variables still to set. |
config.webhooksConfigured | boolean | |
config.platformFeeBps | integer | Deprecated: the card rate of SKUFlow's fee in basis points (0); see platformFees. |
config.platformFees | object | SKUFlow'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 | SKUFlow 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). |
account.country | string or null | |
account.defaultCurrency | string | |
account.businessName | string or null | |
account.chargesEnabled | boolean | |
account.payoutsEnabled | boolean | |
account.detailsSubmitted | boolean | |
account.cardPaymentsStatus | string or null | |
account.achPaymentsStatus | string or null | |
account.achEnabled | boolean | Customers can pay by US bank account (ACH debit). |
account.financing | object | Affirm and Klarna. |
account.financing.enabled | boolean | Pay over time is offered. |
account.financing.affirm | boolean | |
account.financing.klarna | boolean | |
account.financing.minCents | integer | Offered from this amount up. |
account.financing.affirmStatus | string or null | Stripe's Affirm capability: null (not requested), pending, active, inactive. |
account.financing.klarnaStatus | string or null | Stripe's Klarna capability. |
account.requirementsDue | array of object | |
account.requirementsDue[].key | string | |
account.requirementsDue[].label | string | |
account.requirementsDue[].pastDue | boolean | |
account.requirementsDeadline | string (date-time) or null | |
account.disabledReason | string or null | |
account.payoutSchedule | object or null | |
account.payoutSchedule.interval | string or null | |
account.payoutSchedule.delayDays | integer or null | |
account.payoutSchedule.weeklyAnchor | string or null | |
account.payoutSchedule.monthlyAnchor | integer or null | |
account.onlinePaymentsEnabled | boolean | |
account.allowPartialPayments | boolean | |
account.tipsEnabled | boolean | |
account.connectedAt | string (date-time) or null | |
account.disconnectedAt | string (date-time) or null | |
account.lastSyncedAt | string (date-time) or null |
Set up or continue online payments (Stripe onboarding link)
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 skuflow.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 SKUFlow 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-SKUFlow-Approval header. See Approvals. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payment-account/onboarding" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
url | string | A Stripe-hosted page to send the person to. |
expiresAt | string (date-time) |
Refresh the Stripe account's status
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 skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | paymentAccount_refresh (toolset invoices) |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payment-account/refresh" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
config | object | |
config.configured | boolean | The server has a usable Stripe key. |
config.mode | enum or null | One of test, live. |
config.problem | string or null | |
config.missing | array of string | Environment variables still to set. |
config.webhooksConfigured | boolean | |
config.platformFeeBps | integer | Deprecated: the card rate of SKUFlow's fee in basis points (0); see platformFees. |
config.platformFees | object | SKUFlow'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 | SKUFlow 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). |
account.country | string or null | |
account.defaultCurrency | string | |
account.businessName | string or null | |
account.chargesEnabled | boolean | |
account.payoutsEnabled | boolean | |
account.detailsSubmitted | boolean | |
account.cardPaymentsStatus | string or null | |
account.achPaymentsStatus | string or null | |
account.achEnabled | boolean | Customers can pay by US bank account (ACH debit). |
account.financing | object | Affirm and Klarna. |
account.financing.enabled | boolean | Pay over time is offered. |
account.financing.affirm | boolean | |
account.financing.klarna | boolean | |
account.financing.minCents | integer | Offered from this amount up. |
account.financing.affirmStatus | string or null | Stripe's Affirm capability: null (not requested), pending, active, inactive. |
account.financing.klarnaStatus | string or null | Stripe's Klarna capability. |
account.requirementsDue | array of object | |
account.requirementsDue[].key | string | |
account.requirementsDue[].label | string | |
account.requirementsDue[].pastDue | boolean | |
account.requirementsDeadline | string (date-time) or null | |
account.disabledReason | string or null | |
account.payoutSchedule | object or null | |
account.payoutSchedule.interval | string or null | |
account.payoutSchedule.delayDays | integer or null | |
account.payoutSchedule.weeklyAnchor | string or null | |
account.payoutSchedule.monthlyAnchor | integer or null | |
account.onlinePaymentsEnabled | boolean | |
account.allowPartialPayments | boolean | |
account.tipsEnabled | boolean | |
account.connectedAt | string (date-time) or null | |
account.disconnectedAt | string (date-time) or null | |
account.lastSyncedAt | string (date-time) or null |
Open the business's Stripe dashboard
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 skuflow.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 SKUFlow. See Approvals. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payment-account/dashboard-link" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
url | string | A Stripe-hosted page to send the person to. |
Turn online payments, partial payments, tips or financing on or off
PATCH /organizations/{organizationId}/payment-account/settings
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 skuflow.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 SKUFlow. See Approvals. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
onlinePaymentsEnabled | boolean | No | |
allowPartialPayments | boolean | No | |
tipsEnabled | boolean | No | |
financingEnabled | boolean | No | |
financingAffirm | boolean | No | |
financingKlarna | boolean | No | |
financingMinCents | integer | No | 0–100000000. |
Example
curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/payment-account/settings" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"onlinePaymentsEnabled":true,"allowPartialPayments":true,"tipsEnabled":true}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
config | object | |
config.configured | boolean | The server has a usable Stripe key. |
config.mode | enum or null | One of test, live. |
config.problem | string or null | |
config.missing | array of string | Environment variables still to set. |
config.webhooksConfigured | boolean | |
config.platformFeeBps | integer | Deprecated: the card rate of SKUFlow's fee in basis points (0); see platformFees. |
config.platformFees | object | SKUFlow'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 | SKUFlow 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). |
account.country | string or null | |
account.defaultCurrency | string | |
account.businessName | string or null | |
account.chargesEnabled | boolean | |
account.payoutsEnabled | boolean | |
account.detailsSubmitted | boolean | |
account.cardPaymentsStatus | string or null | |
account.achPaymentsStatus | string or null | |
account.achEnabled | boolean | Customers can pay by US bank account (ACH debit). |
account.financing | object | Affirm and Klarna. |
account.financing.enabled | boolean | Pay over time is offered. |
account.financing.affirm | boolean | |
account.financing.klarna | boolean | |
account.financing.minCents | integer | Offered from this amount up. |
account.financing.affirmStatus | string or null | Stripe's Affirm capability: null (not requested), pending, active, inactive. |
account.financing.klarnaStatus | string or null | Stripe's Klarna capability. |
account.requirementsDue | array of object | |
account.requirementsDue[].key | string | |
account.requirementsDue[].label | string | |
account.requirementsDue[].pastDue | boolean | |
account.requirementsDeadline | string (date-time) or null | |
account.disabledReason | string or null | |
account.payoutSchedule | object or null | |
account.payoutSchedule.interval | string or null | |
account.payoutSchedule.delayDays | integer or null | |
account.payoutSchedule.weeklyAnchor | string or null | |
account.payoutSchedule.monthlyAnchor | integer or null | |
account.onlinePaymentsEnabled | boolean | |
account.allowPartialPayments | boolean | |
account.tipsEnabled | boolean | |
account.connectedAt | string (date-time) or null | |
account.disconnectedAt | string (date-time) or null | |
account.lastSyncedAt | string (date-time) or null |
Charge a card: open Stripe Checkout for an invoice
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).
| Permission | payments.record (Owner, Admin, Staff) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | onlinePayments_staffCheckout (toolset invoices) |
| Approval | Over MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
invoiceId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
amountCents | integer | No | 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. SKUFlow takes no fee by default (Stripe's processing fees are billed by Stripe to the business); 400 only when a configured SKUFlow fee would be the whole amount. One of card, us_bank_account, affirm, klarna. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/invoices/{invoiceId}/checkout" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amountCents":12500,"tipCents":12500,"method":"card"}'Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
url | string | The Stripe Checkout page (checkout.stripe.com) to send the payer to. |
paymentIdentifier | string | PAY-n of the PENDING payment; it settles when Stripe's webhook confirms it. |
A customer's saved payment method
GET /organizations/{organizationId}/customers/{customerId}/autopay
Whether the customer saved a card or bank account on file (from their portal), with the method's brand and last four. Read-only.
| Permission | payments.read (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | onlinePayments_autopay (toolset invoices) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
customerId | path | string | Yes |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/customers/{customerId}/autopay" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
available | boolean | 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. |
autopay | boolean | A method is saved on file and may be charged by the business. |
method | object or null | |
method.label | string or null | Visa •••• 4242 / Bank •••• 6789. |
method.type | string or null | |
method.brand | string or null | |
method.last4 | string or null | |
method.expMonth | integer or null | |
method.expYear | integer or null | |
method.autopay | boolean |
Remove a customer's saved payment method
DELETE /organizations/{organizationId}/customers/{customerId}/autopay
Destructive: the saved method is removed (detached at Stripe). The customer can save a new one from their portal. Invoices already issued are untouched.
| Permission | payments.manage (Owner, Admin) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | onlinePayments_disableAutopay (toolset invoices) |
| Approval | Over MCP, this tool always waits for your approval in SKUFlow. See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
customerId | path | string | Yes |
Example
curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/customers/{customerId}/autopay" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
available | boolean | 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. |
autopay | boolean | A method is saved on file and may be charged by the business. |
method | object or null | |
method.label | string or null | Visa •••• 4242 / Bank •••• 6789. |
method.type | string or null | |
method.brand | string or null | |
method.last4 | string or null | |
method.expMonth | integer or null | |
method.expYear | integer or null | |
method.autopay | boolean |