PaymentsStripe

Payments

Stripe

Take card payments on your own Stripe account through Stripe Connect, with hosted Checkout and refunds from the app.

Stripe lets your clients pay invoices by card. You connect your own Stripe account to a business through Stripe Connect (Standard accounts), and each invoice gets a hosted Stripe Checkout page. Money goes straight from your client to your Stripe account and then to your bank on Stripe's normal schedule. We never hold the money and never take a percentage of it.

How it works

  • Your account, your money. Stripe Connect with Standard accounts means the Stripe account is yours: you sign in to Stripe directly, see your payments there, and Stripe pays out to you. Free Invoice Automation is connected to it so it can create checkouts and read payment events.
  • Hosted Checkout only. Card details are typed only on Stripe's own Checkout page. They never reach our servers, which keeps your business within the simplest card-security scope (PCI SAQ-A).
  • Webhooks mark invoices paid. When a payment succeeds, Stripe sends a signed event. We verify it, store it, process it, and then mark the invoice paid or partially paid. A client being redirected back to us does not mark anything paid.
  • Reconciliation as a safety net. If an event is ever lost, a reconciliation run asks Stripe for the true state and corrects the invoice.
  • Fees. Stripe charges its own fees on your Stripe account. We record the fee on the payment where Stripe reports it, so you can see it, but we add nothing.

Connect Stripe

1

Open Settings > Payment methods

Pick the business that should take card payments. Each business connects its own Stripe account.

2

Connect Stripe

Choose to connect Stripe. You are asked to sign in again first, because this decides where money is paid.

3

Finish on Stripe

Stripe opens its own onboarding. Sign in to your existing Stripe account or create one, then return to the app.

4

Check the connection

The connection shows as active once it is verified. Stripe now appears as a payment method on new invoices for this business.

Connections are checked every night. If a connection breaks (for example you disconnected the app inside Stripe), the business shows a warning and the connection status becomes failing or disconnected until you fix it.

Connection statusMeaning
pendingOnboarding started but not finished
activeReady to take payments
failingThe last check failed; see the error shown on the connection
disconnectedThe connection was removed or Stripe revoked access

What the client sees

  1. On the pay page, the client clicks Pay by card.
  2. They are sent to Stripe Checkout for the amount due (or, when partial payments are allowed, the amount they chose).
  3. After paying they return to a page that says the payment is being confirmed.
  4. As soon as Stripe's webhook is verified, the invoice is marked paid and the pay page shows the new balance.

From March 2027, Checkout can also offer Save this card for future invoices from your business name. See Saved cards and auto-charge.

Through the API

ActionRESTPermission
Start Stripe Connect onboardingPOST /v1/connections/stripe/onboardingrails.manage (fresh sign-in)
List connectionsGET /v1/connectionsrails.manage
Verify a connectionPOST /v1/connections/{id}/verifyrails.manage
Delete a connectionDELETE /v1/connections/{id}rails.manage
Start a checkout (pay page)POST /v1/public/pay/{token}/checkoutpay token
Refund a paymentPOST /v1/payments/{id}/refundspayments.refund

Starting onboarding needs a fresh sign-in, so it is done from a web session rather than with an API key. The pay page calls the checkout route with the pay token; it returns a hosted Stripe Checkout URL and never marks anything paid.

Start a checkout (pay page request)
{
  "connection_id": "0193f2a9-3c4d-7e5f-8a6b-7c8d9e0f1a2b",
  "amount_minor": "50000"
}

To check whether an invoice is paid, read its payment status or listen for webhooks:

Payment status
curl "https://api.freeinvoiceautomation.com/v1/documents/0193f2b4-5a6b-7c8d-9e0f-1a2b3c4d5e6f/payment-status" \
  -H "Authorization: Bearer $FIA_API_KEY"

Over MCP, ask your assistant with get_payment_status. Outgoing webhook events include payment.succeeded, document.paid, document.partially_paid and payment.refunded.

Stripe events we act on

Stripe sends events for all connected accounts to one endpoint, and each event is matched to your connection by its Stripe account id. Each event is processed once, even if Stripe sends it again. The planned list covers completed, expired and failed Checkout sessions, succeeded and failed payment intents, refunds (charge.refunded), disputes (charge.dispute.created), account updates and deauthorisation, and, from March 2027, saved-card events.

Refunds

You can refund a Stripe payment from the app, without opening Stripe. Refunds usually start from a credit note with the refund settlement, or directly on the payment. The refund is created on your connected account and recorded when Stripe confirms it. See Refunds.

Rules and edge cases

  • One Stripe account per business connection. Different businesses can connect different Stripe accounts.
  • Currency. Stripe takes payments in the currencies Stripe supports for your account.
  • Partial payments are allowed by default; the pay page lets the client pay less than the balance.
  • Voided invoices have their open payment links cancelled; a client cannot start a new checkout.
  • Disconnecting. Deleting the connection is destructive and asks for confirmation. Invoices already paid keep their payments.
  • Not our billing. This Stripe connection is for your clients paying you. Your own Team plan is billed separately.

Permissions

KeyNeeded forDefault roles
rails.manageConnecting, verifying and removing StripeOwner, Admin
payments.viewSeeing Stripe paymentsOwner, Admin, Editor, Viewer, Accountant
payments.refundRefunding Stripe paymentsOwner, Admin

Errors

CodeWhen
fresh_signin_requiredConnecting Stripe without a recent sign-in
rail_not_connectedThe invoice offers Stripe but the connection is not active
connection_failedVerifying the connection failed
upstream_errorStripe returned an error; try again
not_configuredCard payments are temporarily unavailable on the platform
token_revokedThe pay link was cancelled, for example because the invoice was voided