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.
Coming in early May 2026: Scorecards and Transcripts
Two new endpoints are landing in the early May release.
Scorecards
You'll be able to fetch scorecard results for any recording — the criteria, scores, AI-generated reasoning, and reviewer comments. This makes it possible to:
Pipe scorecard outcomes into Salesforce as custom object records
Build aggregate reporting across reps, teams, or deal stages in your BI tool
Trigger workflows when specific criteria fail (e.g., notify a manager when "next steps confirmed" is rated low)
Full transcripts
You'll be able to retrieve the complete transcript for a recording, including:
Speaker-attributed utterances with timestamps
Word-level timing where available
The detected language
This unlocks a wide range of use cases — feeding transcripts into your own LLM workflows, archiving meeting content in your knowledge base, running custom search across calls, or training internal models on your sales conversations.
We'll update this article with detailed endpoint references and examples once the release is live. If you want to be notified when it ships, opt in to API release announcements in your workspace settings.
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.
