You can now easily integrate your favorite note taker with Streamlined to get video call notes automatically inside of the dashboard.
Overview
Streamlined can now automatically pull in video note taker meetings.
Read Native Note Taker Integration - Supported Platform Guides to learn how you can set it up. If you need help at any point, feel free to Get in Touch.
Features
With official support for note takers, we have a few more opportunities that have been turned into quality of life features:
Link to Appointment
Meetings can automatically be linked to appointments within the CRM, based on the start time and contacts involved.
In the future, this will allow you to see meetings on your appointments table, or appointments on your meetings table, once we add Custom Tables & Columns.
Mark as Showed
Because we’re linking to an appointment, we can also automatically mark appointments as showed.
This is highly convenient if you need to manually mark appointments are read right now.
Fully Automated
Previously, you needed to create a note on the contact in your CRM in order for the meeting to be saved.
This was not only often manual, but also expensive and unreliable, since the AI needed to extract the details like duration and link.
Now this can be fully automated using either your note taker tool or automation platform of choice.
Supported Platform Guides
Custom Setup
Create a Token
To send meetings in, you need a token — an API key that says “this sender may post meetings, for this sub-account.”
Pin it to a single sub-account. That way, when we receive the contact’s email address, we can search for a contact that matches that email within your sub-account — and you don’t have to name the sub-account on every request.
Integrations
To create a token, head to Settings > Integrations and click on “New Token.”
The modal asks three questions. Answer them like this:
Step | What to pick |
Capabilities | Choose Use a preset, then Sync external meetings. That grants exactly two capabilities — post a meeting and delete one — and nothing else, so the token cannot read your CRM data or touch your dashboards even if it leaks. |
Sub-accounts | Pick the one sub-account these meetings belong to. A token pinned to exactly one sub-account lets a sender post without naming it — which matters, because most note takers can only be given a URL. |
Name | Whatever you’ll recognise later — “Fathom → Main Office” beats “token 2”. |
Copy the token on the last screen. It is only shown once.
Sending Meetings
Post the meeting to this endpoint, with your token in the X-API-Key header:
POST https://api.streamlined.so/gateway/v2/meeting
X-API-Key: <access-token>
Content-Type: application/jsonThe body is whatever your note taker sends. You don’t declare which tool it came from — we work that out from the shape of the payload.
If your note taker cannot send headers
Some note takers — Fathom and Read.ai among them — give you a destination URL field and nothing else. Put the token in the URL:
POST https://api.streamlined.so/gateway/v2/meeting?token=<access-token>This is a supported way in, not a workaround — it exists for exactly these senders. Two things follow from it:
- Treat the whole URL as a secret. A URL travels through logs, referrers and proxies in ways a header does not, so use the header wherever your sender allows one.
- Pin the token narrowly. With the Sync external meetings preset and a single sub-account, a leaked URL can post and delete meetings on that one sub-account and nothing else.
?token= works on the write endpoints like this one. It does not work on the SQL query endpoints, which take a header only.
Every response carries an ok field, which is what you should branch on:
{ "ok": true, "result": { ... } }
{ "ok": false, "error": "..." }Optional Parameters
Parameter | When you need it |
?account=<location-id> | Only if your token is not pinned to a single sub-account. A token spanning several has no way to know where the meeting goes, so it is refused rather than guessing. |
?source=fathom | Almost never. It nudges us to try one format first, but the payload is still what decides — naming fathom and sending Read.ai parses correctly anyway. |
Avoiding Duplicates
Meetings are de-duplicated on unique_id. Send the identifier your note taker already generates, and a retried or redelivered webhook updates the meeting instead of creating a second one.
If you don’t send one, we derive it from the transcript — so an identical transcript still won’t duplicate, but anything that changes the text will look like a new meeting. Send the id wherever you have one.
Deleting a Meeting
A test call, a duplicate, or a recording you’d rather not keep can be removed with its id:
DELETE https://api.streamlined.so/gateway/v2/meeting?id=<meeting-id>
X-API-Key: <access-token>This is permanent, and it’s why the Sync external meetings preset grants delete alongside create — a sender that can post a meeting should be able to retract one without waiting on us.
There is no update. A meeting is a record of something that happened, and any analysis built on a transcript would end up describing text that no longer exists. To correct one, delete it and post it again.
Troubleshooting
“Could not parse meeting” — read the whole error.
We try three formats: Fathom, Read.ai, and the custom shape above. When a payload matches none of them, the response names all three attempts and what each one objected to.
That is almost always enough to spot the problem — a missing full_transcript, a duration_minutes that arrived as an empty string, a title under 10 characters. Retrying the same payload will not help; fix the field the error names.
“No sub-account” errors.
Your token is pinned to more than one sub-account, so we can’t tell where the meeting goes. Either add ?account=<location-id> to the URL, or mint a token pinned to exactly one sub-account — which is what most note-taker setups want.
The meeting landed but isn’t attached to anyone.
owner_email has to match a user in your CRM, and contact_email a contact in that sub-account. If a meeting shows up unattached, one of those two addresses doesn’t exist on the sub-account the token is pinned to.
Rate limits.
500 requests per 10 seconds per token, which no note taker will ever approach. Exceed it and you get a 429 with a Retry-After header telling you how long to wait.
Frequent Questions
Do you offer custom development work?
Should I install your app at the agency level or location level?
What’s your support like?
How do I install your app?
Do you offer a free trial?
Can I request a feature or product?
Are there any usage limits on your apps?
Can I use your app on multiple accounts?
How do I uninstall the app?
Need to Get in Touch?
If you have any questions, concerns, or ideas, I’d love to hear them!
Visit the page below to book a call or get in touch right away.
