Using the Weflow Public API
The Weflow Public API gives you programmatic access to the data Weflow Conversation Intelligence captures from your meetings — recordings, participants, video URLs, comments, clips, and interaction metrics. You can use it to push call data into a data warehouse, build custom dashboards, sync recordings into internal tools, or trigger workflows in other systems.
This article walks through how to authenticate, what's available today, and what's coming in the early May 2026 release.
The full interactive reference lives at api.getweflow.app/api/v1/docs.
Before you start
To use the API you'll need:
A Weflow workspace on a plan that includes API access. If you're not sure whether your plan includes it, reach out to your Customer Success Manager or contact support.
An API key generated from your Weflow workspace settings. Treat this key like a password — it grants access to all conversation data in your company workspace.
The API can be set here:
The API base URL is:
https://api.getweflow.app/api/v1
Authentication
Every request must include your API key in the Authorization header as a Bearer token:
Authorization: Bearer YOUR_API_KEY
If the key is missing or invalid, the API returns a 401 Unauthorized response. If your workspace doesn't have API access enabled, list endpoints return 403 Forbidden — in that case, contact support to enable it.
Rate limits
The API is rate limited per workspace. If you exceed the limit, you'll receive a 429 Too Many Requests response. We recommend implementing exponential backoff for any production integration and batching reads where possible (for example, paginating with a sensible page size rather than fetching one record at a time).
Working with recordings
Everything in the API today is centered on recordings — the meetings Weflow has captured, transcribed, and analyzed. Each recording has a unique uid (UUID) that you'll use across all the endpoints below.
List recordings
GET /recordings
Returns a paginated list of recordings for your company, newest first.
Query parameters:
Parameter | Type | Description |
| integer | Number of recordings per page (default |
| string | Cursor from the previous response to fetch the next page |
| ISO 8601 datetime | Only return recordings on or after this date |
| ISO 8601 datetime | Only return recordings on or before this date |
The response includes data (the recordings), total, nextCursor, and hasMore. To paginate, pass nextCursor back in your next request as the cursor parameter — and keep going while hasMore is true.
Example:
curl "https://api.getweflow.app/api/v1/recordings?limit=50&startDate=2026-04-01T00:00:00Z" \ -H "Authorization: Bearer YOUR_API_KEY"
Get a single recording
GET /recordings/{uid}Returns full metadata for one recording, including:
Title, duration, and start time
Source (
botor other), whether the meeting was external, and conference URLThe linked Salesforce recording ID (if Weflow synced it to Salesforce)
Transcript and summary languages
The list of participants with name, email, and role (
hostor attendee)All Salesforce records the recording is linked to (Account, Opportunity, Contact, etc.) with their IDs, object types, and names
This is the endpoint you'll typically call to enrich a recording in your system after spotting it in the list endpoint.
Get recording video URLs
GET /recordings/{uid}/videoReturns pre-signed S3 URLs for the recording video:
streamUrl— for playback (e.g., embedding in a web player)downloadUrl— for downloading the fileexpiresAt— the timestamp at which both URLs expire
Important: The URLs expire after 1 hour. Don't store them long-term. If you need a fresh URL, re-call this endpoint at request time.
Get recording comments
GET /recordings/{uid}/commentsReturns threaded comments left on the recording. The response is a flat list, but each comment includes a parentCommentUid and a replies array containing the UIDs of its replies — so you can reconstruct threads on your side.
Each comment includes the author (userUid, userName), timestamp position in the recording (timestampSeconds), the rich-text content, and the character range it's anchored to (startChar, endChar).
Get recording clips
GET /recordings/{uid}/clipsReturns all clips someone has saved from the recording. Each clip has a start and end (in seconds), a title, the text it covers, and the user who created it.
Useful for surfacing customer-highlighted moments, building libraries of objection-handling examples, or syndicating clips to enablement tools.
Get recording interaction metrics
GET /recordings/{uid}/interaction-metricsReturns per-participant conversation analytics:
Metric | What it measures |
| Share of the meeting this person spoke |
| Longest uninterrupted stretch of speech (seconds) |
| Composite score for back-and-forth engagement |
| How long this person waits before responding |
| Question rate normalized to hourly |
| Total questions asked |
| Number of pauses between speaker transitions |
These are the same metrics that power the coaching insights in the Weflow app — pulling them via API is how teams typically build custom rep scorecards or feed coaching data into a BI tool.
Get recording transcript
GET /recordings/{uid}/transcript
Returns the full transcript for a recording, grouped by speaker, with per-word timestamps where available. Each segment includes:
speakerIdandspeaker(the speaker label)words, an array of{ text, start, end }entries with timings in seconds
Returns an empty array if transcription never produced output (for example, a meeting with no audio captured).
Common uses: feeding transcripts into your own LLM workflows, archiving meeting content in a knowledge base, running custom search across calls, or training internal models on your sales conversations.
Get recording scorecards
GET /recordings/{uid}/scorecards
Returns all cached scorecards for a recording, one per coaching template that has been run against it. Each scorecard contains:
coachingTemplateUidso you can map results back to the templateAn
overallblock with a title, summary text, and numericratingA list of
sections, each with its own title, text, rating, anditems(timestamped evidence pulled from the call)
Useful for piping scorecard outcomes into Salesforce as custom object records, building aggregate reporting across reps or teams in your BI tool, or triggering workflows when specific criteria fail (e.g., notify a manager when "next steps confirmed" is rated low).
Get recording trackers
GET /recordings/{uid}/trackers
Returns every tracker that has at least one match on the recording, along with the matches themselves. Each match includes the matched phrase, the keyword that triggered it, and its position (index) in the transcript.
Use this to surface where competitors, pricing terms, objections, or any other tracked keywords came up across your calls without having to parse the transcript yourself.
Get recording summary
GET /recordings/{uid}/summary
Returns the AI-generated summary for a recording, based on a specific summary template.
Query parameters:
Parameter | Type | Description |
| UUID | Summary template UID. If omitted, your company's default summary template is used. |
The response includes the summaryTemplateUid, the overall summary text, and a list of sections. Each section has a title and timestamped items linking back into the recording.
Returns 404 if the recording or template isn't found, or if a summary couldn't be generated for that combination.
List summary templates
GET /summary-templates
Returns every summary template available to your company, with uid, name, and an isDefault flag. Use a returned uid as the templateId query parameter on /recordings/{uid}/summary to fetch the corresponding summary.
This is the endpoint to call first if you want to generate multiple summary flavors per recording (e.g., one for CRM sync, one for executive review).
Error handling
Errors follow a consistent shape:
{ "error": { "code": "string", "message": "string" } }Common status codes:
400 Bad Request— invalid query parameters (typically a malformed date or unknown cursor)401 Unauthorized— missing or invalid API key403 Forbidden— API not enabled for your workspace404 Not Found— recording UID doesn't exist or isn't accessible to your workspace429 Too Many Requests— rate limit exceeded; back off and retry
A typical integration pattern
For most use cases, the flow looks like this:
Discover new recordings — poll
GET /recordingson a schedule (e.g., every 15 minutes) usingstartDateset to the last sync time, paginating untilhasMoreisfalse.Enrich each recording — for any new UID, call
GET /recordings/{uid}to pull metadata, participants, and Salesforce links.Pull the analytics you need — call
interaction-metrics,comments,clips, and (from May)scorecardsand the transcript endpoint as needed.Generate video URLs on demand — never cache
streamUrlordownloadUrl; call/videoat the moment you need them.
Need help?
If you run into anything unexpected — missing data, unclear errors, or a use case the API doesn't yet support — reach out to support@getweflow.com or use the in-app chat. We read every API feedback ticket and use it to prioritize the roadmap.
