Email, SMS, scanning, quotes and invoicing

Catalogue of plugins (Email, SMS, WhatsApp, OCR, Quotes, Invoicing). Every plugin is always available - there are no per-plugin subscriptions. Each plugin's per-action token cost is shown on its card; usage burns from your org's monthly token bucket. WhatsApp is the one exception to "always available": it has an Enabled switch and stays off until an admin turns it on.

Token cost per action

  1. 1

    Email - 1 token per email

  2. 2

    SMS - 30 tokens per SMS

  3. 3

    WhatsApp - 5 tokens per message

  4. 4

    OCR - 20 tokens per scan

  5. 5

    Quotes - 5 tokens per quote created

  6. 6

    Invoicing - 5 tokens per invoice created

Configuring a plugin

  1. 1

    Click "Configure" on a plugin card to set per-org settings.

  2. 2

    Email: set the default "From" address used when sending from records.

  3. 3

    Invoicing: toggle Xero / MYOB / QuickBooks under "Accounting integrations" - only enabled providers receive invoice syncs.

  4. 4

    Quotes / Invoicing payment details (bank, payment link, logo) are set in /settings → Quotes / Invoicing config.

Using the Email plugin

  1. 1

    Open a record (/entities/[id]), click the Email tab, compose, and click Send.

  2. 2

    Sent emails and delivery status appear in the record's communication history. Each send burns 1 token.

Using the SMS plugin

  1. 1

    Open a record (/entities/[id]), click the SMS tab, compose, and click Send.

  2. 2

    Each SMS send burns 30 tokens (reflects real carrier cost).

Replies landing back on the record

  1. 1

    When someone replies to an email, SMS or WhatsApp message you sent from a record, the reply shows up in that record's matching tab, tinted green and badged received, with an arrow pointing in and the sender shown instead of a Streams user name.

  2. 2

    Email is matched exactly, with nothing to configure. Streams puts a reply address naming the record on every email it sends from one, so a customer just hits reply. Their attachments are copied onto the record (up to 25 MB each, the first ten, and signature images are ignored), and the quoted thread underneath is hidden behind a Show quoted text link.

  3. 3

    SMS and WhatsApp are matched by phone number, because a text carries no marker Streams can put anything in. The reply is attached to the record that most recently messaged that number, within the last 30 days. A WhatsApp reply sent using WhatsApp's own reply-to-message gesture is matched exactly, no guessing involved and no time limit.

  4. 4

    If a message cannot be placed with certainty, it is not filed at all. Streams messages go out on a number shared with other organisations, so if two organisations have both messaged someone recently there is no safe answer and the message is reported to the Streams team instead of being attached to the wrong record.

  5. 5

    A received message has no Resend button: it is not yours to send again.

  6. 6

    On WhatsApp, a received message opens the 24-hour free-text window, and the composer now tells you the exact time it closes.

  7. 7

    Somebody is told. An email notification goes to whoever the record is assigned to, or, if the record is unassigned, to whoever the organisation picked under Reply notifications on the Settings page. It quotes the message and links straight to the record. Don't reply to that notification: it goes nowhere near the customer. Open the record and answer there, so the next reply comes back to the same place. Turn these off with the email notifications switch on My Account (/account); they are also copied to your "Also send notifications to" address.

Using the WhatsApp plugin

  1. 1

    WhatsApp is off for every organisation until an admin turns it on with the Enabled switch on its plugin card. Messages go out on a sender shared with other organisations, so it is opt-in.

  2. 2

    Assign WhatsApp to a step (stream settings → edit step → Plugins), the same way as Email and SMS. Records sitting at that step get a WhatsApp composer on their Overview and a WhatsApp tab for history.

  3. 3

    The first time anyone sends, an owner or admin must confirm that your contacts have agreed to be messaged. This is a one-off confirmation for the whole organisation, recorded in the audit log with who accepted it.

  4. 4

    Compose in the box on the record's Overview: type the recipient's number the way you normally write it, write the message, and insert {{field}} placeholders from the record if you want. Each send burns 5 tokens.

  5. 5

    The 24-hour rule. WhatsApp only allows free text within 24 hours of that person messaging you. Outside that window WhatsApp needs a pre-approved template, which Streams does not offer yet, so the message is accepted and then rejected.

  6. 6

    Because of that, "Sent" means WhatsApp accepted it, not that it arrived. The WhatsApp tab shows the real outcome once it comes back: delivered, or failed with a plain explanation such as the window being closed or the number not being on WhatsApp.

  7. 7

    There is no resend button on WhatsApp: a failed message almost always failed for a reason repeating it will not fix, and a retry would cost another 5 tokens.

  8. 8

    Landlines are refused before anything is charged. A reply from the customer does land on the record: it appears in the WhatsApp tab marked received, and it opens a fresh 24-hour window.

Using the OCR plugin

  1. 1

    Open a record (/entities/[id]), click the OCR tab, then click "Scan Document".

  2. 2

    Select an image file (JPG, PNG, WEBP, TIFF, BMP, GIF) or a PDF (max 20 MB).

  3. 3

    The AI extracts text from the document and displays it immediately.

  4. 4

    All scans are saved - the OCR tab shows a full history with file name, date, who scanned it, and the extracted text.

  5. 5

    Each scan burns 20 tokens. Watch your remaining balance on the billing page.

Configuring the Quotes plugin

  1. 1

    Click the gear icon on the Quotes card.

  2. 2

    Upload your company logo (PNG or JPG, max 2 MB) - it appears on the PDF and the public quote page.

  3. 3

    Set payment details: choose Bank Transfer, Payment Link, or Both.

  4. 4

    For bank transfer, enter Account Name, BSB, and Account Number.

  5. 5

    For payment link, paste your payment URL and set the button label.

  6. 6

    Add payment instructions (e.g. "Please reference your quote number").

  7. 7

    Set defaults: currency (AUD, USD, GBP, EUR, NZD), validity period (days), and default notes/terms.

  8. 8

    Per-stream overrides: when editing a stream step, tick "Quotes" under Plugins to set step-level payment details and defaults that override the org-level settings.

Configuring the Invoicing plugin

  1. 1

    Go to Settings to configure invoice payment details and defaults.

  2. 2

    Set payment details: choose Bank Transfer, Payment Link, or Both. These appear on every invoice PDF and public invoice page.

  3. 3

    For bank transfer, enter Account Name, BSB, and Account Number.

  4. 4

    Set defaults: currency, payment terms (e.g. "Net 14"), due days, default GST rate (10% for Australia), and default notes/terms.

  5. 5

    Configure field mappings to auto-populate customer details from record metadata: customer name fields, email field, address fields, and ABN field.

  6. 6

    Enable the Invoicing plugin on specific stream steps via the step editor - the Invoices tab only appears on records that are at a step with Invoicing enabled.

  7. 7

    CSV export is built into the Invoicing plugin - admins can export invoices from the Export Data page (/export) with date range and status filters. The CSV includes all GST/BAS fields for bookkeepers.

  8. 8

    Accounting sync: The Invoicing plugin includes built-in connections to Xero, MYOB, and QuickBooks. First create a developer app with your accounting provider (a "Web app" at developer.xero.com, an app at the MYOB Developer Portal, or an app at developer.intuit.com) with the redirect URI set to https://yourdomain.com/api/plugins/invoicing/connections/callback. Then add the connection in Settings → Accounting Connections with the client ID and secret. Click "Connect" to complete OAuth. For MYOB, if your account has multiple company files you'll be asked to select which one to use. For QuickBooks, the realm ID is captured automatically. Finally, assign connections to streams in each stream's settings page. Invoices auto-sync when sent - line items push with correct GST tax types per provider. For MYOB and QuickBooks, customers are automatically found or created by name before syncing.

  9. 9

    Checking payment status: Synced invoices show a magnifying glass "Check Status" button. Click it to poll the accounting provider for the latest payment status. Xero also sends automatic webhook updates when payments are recorded. MYOB and QuickBooks do not use webhooks in Streams, so use the Check Status button to pull payment updates on demand.

What people ask about this

  • How do I send an email from a record?
  • What plugins are available?
  • How do I see my token balance this month?
  • What happens when I run out of tokens?
  • How do I scan a document with OCR?
  • What file types does OCR support?
  • Where do I see my OCR scan history?
  • How do I set up payment details for quotes?
  • How do I create and send an invoice?
  • How do I record a payment on an invoice?
  • How do I export invoices to CSV for my bookkeeper?
  • How do I connect Xero, MYOB, or QuickBooks to my invoicing?
  • How do I check if a MYOB or QuickBooks invoice has been paid?
  • How do I configure the Quotes plugin?
  • How does GST rounding work on invoices?
  • How do I handle GST-free items on an invoice?
  • Will my totals match Xero/MYOB when I import?

Inside the app there is an assistant that answers these from your own written process, not just from ours.

Other guides

All guides

Start with the free plan

Two users, 500 records and every feature switched on. No credit card, and your data stays in Australia.

Get started free