Get Started
Quickstart
Create your account, add a business and a client, send your first invoice and get paid, in the web app or through the API.
This guide takes you from nothing to a paid invoice. You create a free account, add the business that issues the invoice, add a client, make and send the invoice, and then see how your client pays and how the payment is recorded. Every step works in the web app and through the API, because both call the same actions with the same permissions.
You need about five minutes and an email address. No card is needed for the Free plan.
If you only need one PDF invoice right now and do not want an account, use the free invoice generator. Anything you make there moves into your account later if you sign up.
Before you start
- Web app: open app.freeinvoiceautomation.com. Everything below happens there.
- API: you still create the account in the web app first. Then create an API key in Settings > API keys and keep it somewhere safe; it is shown once. Send it as
Authorization: Bearer <key>tohttps://api.freeinvoiceautomation.com/v1. See Authentication.
Money in the API is always a string of integer minor units with a currency, so "120000" with "currency": "USD" is 1,200.00 USD. Read Money and currencies if that is new to you.
Send your first invoice
Create your account
Go to app.freeinvoiceautomation.com/sign-up and sign up with email and password, Google or a magic link. A new account starts on the Free plan with you as its Owner.
Verify your email address from the link we send you. You can use the app straight away, but sending email through our platform mailer needs a verified address. See Create your account.
Add your first business
Right after sign-up, onboarding asks for your first business: the person or company whose name goes on the invoice. Enter the legal name, country and base currency. The country fills in sensible defaults such as currency and tax presets, and you can change them later.
Each business has its own numbering, tax rates, payment methods and templates. You can add as many businesses as you like on every plan. See Businesses.
Choose how you get paid
Open the business's payment settings and set up at least one way to be paid:
- Stripe: connect your own Stripe account in one click. Card payments go straight to you. This needs a fresh sign-in, because it is a sensitive action. See Stripe.
- Bank transfer: add your bank details (free text plus structured fields such as IBAN and SWIFT). Your client sees them on the pay page. See Bank transfer.
You can skip this step and add a method later, but your pay page will have nothing to offer until you do.
Add a client
Add the person or company you are billing: name, email and, if you like, address, tax id, default currency and language. Clients never get a password; they open what you send them from a link. See Clients and contacts.
Create the invoice
Create an invoice for that client and add lines with a description, quantity and unit price. Add taxes and discounts if you need them. Totals are worked out for you in integer minor units, so they always add up to the cent.
The invoice starts as a draft. A draft has no number yet and you can change it freely. See Invoices and Line items.
Preview and send
Click send. You always see a preview of the email before anything goes out. When you confirm, the invoice gets its number from the business's gap-free sequence, a snapshot of it is stored, and your client receives an email with a link to the pay page.
You can also click Copy link to share the pay link through any channel you like, or Download PDF. See Send a document.
Your client pays
The link opens the pay page: your invoice, the amount due and every payment method you enabled.
- Card: the client clicks Pay by card and pays on a hosted Stripe Checkout page. The invoice is marked paid when Stripe confirms the payment to us, not when the client's browser comes back.
- Bank transfer: the client pays from their bank, then clicks I have paid and can upload proof. You are notified, but the invoice is not marked paid until you record the payment.
Record a bank payment
When the money arrives in your account, record the payment on the invoice: amount, date, reference and the proof if you have one. The balance goes down and the invoice moves to paid (or partly paid). Every record is written to the audit trail. See Record a payment.
That is the whole loop. From here you can add saved items, estimates, credit notes and more businesses, all on the Free plan.
The same flow through the API
Each step above is one API call. The examples use cURL; the TypeScript SDK offers the same calls as typed methods.
Create the business that issues the invoice. See Create a business.
curl -X POST "https://api.freeinvoiceautomation.com/v1/businesses" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quickstart-business-1" \
-d '{
"legal_name": "Studio North",
"country": "GB",
"base_currency": "USD",
"timezone": "Europe/London",
"locale": "en-GB",
"email": "[email protected]"
}'Add a client to that business. The same route updates a client when you send an existing id. See Create or update a client.
curl -X POST "https://api.freeinvoiceautomation.com/v1/clients" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quickstart-client-1" \
-d '{
"business_id": "0193f2a1-7c4e-7b9a-9f10-3c2d1e0a4b51",
"name": "Acme Ltd",
"email": "[email protected]"
}'Create a draft invoice. See Create an invoice.
curl -X POST "https://api.freeinvoiceautomation.com/v1/documents" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quickstart-invoice-1" \
-d '{
"type": "invoice",
"business_id": "0193f2a1-7c4e-7b9a-9f10-3c2d1e0a4b51",
"client_id": "0193f2a1-0c11-7d2e-9a40-1b2c3d4e5f60",
"currency": "USD",
"due_date": "2027-01-31",
"lines": [
{ "description": "Website design", "quantity": "1", "unit_price_minor": "120000" }
]
}'The response is the draft with "status": "draft", "number": null and its computed totals.
First ask for a preview, then send with "confirm": true. Sends need that confirmation unless your key is in auto_send mode, so nothing reaches your client by accident. See Preview a send, Send a document and Drafts and confirmations.
curl -X POST "https://api.freeinvoiceautomation.com/v1/documents/0193f2b4-5a6b-7c8d-9e0f-1a2b3c4d5e6f/send-preview" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Idempotency-Key: quickstart-preview-1"
curl -X POST "https://api.freeinvoiceautomation.com/v1/documents/0193f2b4-5a6b-7c8d-9e0f-1a2b3c4d5e6f/send" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quickstart-send-1" \
-d '{ "confirm": true }'To share the link yourself instead, create a share link with Create a share link. The document then carries a pay_url.
Record a bank transfer you received. Card payments through Stripe are recorded for you from Stripe's confirmation, so you never call this for them. See Record a payment.
curl -X POST "https://api.freeinvoiceautomation.com/v1/payments" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quickstart-payment-1" \
-d '{
"document_id": "0193f2b4-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
"amount_minor": "120000",
"currency": "USD",
"received_at": "2027-01-20T09:30:00Z",
"reference": "BANK-REF-55120"
}'Check the result at any time with Get payment status.
Send an Idempotency-Key with every write. If your network drops and you retry with the same key, you get the first result back and nothing is created twice. See Idempotency.
Prefer your AI assistant?
Connect Claude, ChatGPT, Grok or Gemini to our MCP server at https://mcp.freeinvoiceautomation.com/mcp, sign in, and ask in plain words: "Create an invoice for Acme Ltd for website design, 1,200 USD, due 31 January." The assistant creates a draft and shows you a preview; it sends only when you confirm. See the MCP overview.