There's a pattern I see a lot in small bookkeeping firms right now: someone on the team has figured out that ChatGPT or Claude can write a decent client email. Another person is running n8n automations to handle repeating admin tasks. There's a Google Sheet somewhere pulling data from a Zapier zap. It works, kind of, but it's all disconnected from the actual close.
The missing piece is usually the financial data itself. Getting clean, structured month-end numbers out of your reporting stack and into these tools without exporting a CSV, reformatting it, and pasting it somewhere — that's where the automation breaks down. You end up doing the manual step anyway.
Streamline Reports ships a REST API. This post is about what it does, what you can actually build with it, and when it makes sense to plug it into your AI workflows.
What the API exposes
Every resource in Streamline Reports is available as a JSON endpoint. The API key-authenticated surface covers:
Clients — list, create, update, and delete client records (
GET /api/v1/clients,POST /api/v1/clients,PATCH /api/v1/clients/[id])Reports — fetch report data, trigger PDF generation, and queue sends (
GET /api/v1/reports/[id],POST /api/v1/reports/[id]/generate,POST /api/v1/reports/[id]/send)Report templates — manage and apply firm-level templates programmatically (
GET /api/v1/report-templates)Email templates — read and update the email copy that goes with each report (
GET /api/v1/email-templates,POST /api/v1/email-templates)Firm — read current firm settings and connected data sources (
GET /api/v1/firm)
There's also an export route — GET /api/reports/[id]/export/xlsx — that returns a multi-sheet Excel workbook from any report's data blocks, which is useful when the downstream tool (or client) prefers a spreadsheet.
The full spec is at /api/v1/openapi.json if you want to import it directly into Postman, Insomnia, or whatever REST client you're working from. All endpoints follow standard JSON:API conventions with consistent error codes across the surface.
The actual workflows this unlocks
Feeding report data into a GPT tool
The most direct use case: you want a language model to write a specific kind of commentary — something more tailored than the AI executive summary Streamline generates internally, or structured for a different output format like a Slack message or a client portal update.
The pattern is straightforward. After the month-end close, your script calls GET /api/v1/reports/[id] and gets back structured financial data for that client. You pass the relevant numbers into your prompt — revenue, gross margin, net, any line items the client tracks closely — and the model drafts whatever you need. You review, edit if needed, send.
This is different from the built-in AI summary because you control the prompt entirely. If you have a client where you always want to flag a specific account, or where the commentary style needs to match a particular tone, you're not constrained by the platform's output format. The data comes out as JSON; what you do with it is up to you.
Triggering report delivery from n8n or Zapier
The scheduled-send feature in Streamline handles the common case — set a send date per client, the cron handles delivery. But some firms have more complex logic than a single date: a report might depend on the bookkeeper signing off in a separate system, or the send should be triggered by a status change in a project management tool.
For those situations, the API's send endpoint is the right lever. You hit POST /api/v1/reports/[id]/send when the upstream condition is met, and Streamline handles the email send from the bookkeeper's connected Gmail or Outlook account, including any templated email copy. The client gets their branded PDF link exactly as they would from a manual send — nothing looks different on their end.
An n8n workflow that does this looks roughly like: trigger from your project tool's webhook → check report status via GET /api/v1/reports/[id] → if the report is ready and not yet sent, call the send endpoint. Ten minutes to set up if you already have an n8n instance.
Building a client communication layer
For firms that want to build something more custom — their own client portal, a Notion integration, a client-facing Slack bot — the API gives you the read surface you need. You can pull the current report state per client, surface it in whatever interface makes sense for your firm's client relationships, and trigger actions (generate, send, export) from there.
This is the use case the API was mainly designed around at Team and Enterprise tier: firms that have enough clients and enough operational complexity that the standard Streamline interface isn't the right place to manage everything. The API doesn't replace the dashboard; it gives you a way to wire the data into whatever else you're running.
Authentication and access
API keys are managed from Settings → Developer inside Streamline. You create a key there, copy it once (it won't be shown again), and pass it as a Bearer token in the Authorization header. Per-key rate limits apply. Keys can be revoked independently, so you can issue one per integration and rotate without touching others.
API access is gated to Team and Enterprise plans. The underlying reason is practical: the use cases above — multi-client automation, webhook-driven delivery, external integrations — are more relevant at firm scale than for a solo bookkeeper managing three clients from the dashboard. The free and Pro tiers cover the dashboard-first workflow fully.
Webhooks for event-driven workflows
The API also includes a webhook system. You register an endpoint, and Streamline delivers signed payloads when things happen — report generated, PDF ready, email sent, client status changed.
Webhook delivery uses HMAC-SHA256 signatures, so your endpoint can verify the request came from Streamline before acting on it. Retries follow exponential backoff for failed deliveries, with a delivery log in the dashboard if you need to debug a missed event.
For AI workflows, webhooks are usually more useful than polling. Instead of checking whether a report is ready every minute, you register an endpoint, and your automation kicks off the moment the PDF is in storage and the signed URL is available.
How to get started
If you're on Team or Enterprise, API keys are in Settings → Developer. The documentation at /docs/api has a quickstart section with authentication examples in TypeScript and Python, plus the full endpoint reference.
If you're evaluating whether the API tier makes sense for your firm: the right question is whether you're spending real time on any step that could be triggered or automated by connecting Streamline to your existing stack. If the answer is yes, it's worth running through the quickstart on a single integration before committing.
For everything else — the report delivery workflow, the white-labeled PDF, the AI-generated executive summaries — those are all available on the Free and Pro tiers without touching the API. Try those first.
Free — full dashboard access, three active clients, "Powered by Streamline Reports" footer on the PDF
Pro — $49/month, white-label, AI executive summaries, 14-day free trial, no card required
Team — $139/month, API access, webhooks, three seats included, for firms ready to automate