Skip to main content

Weflow Public API

The Weflow Public API gives you programmatic access to the data Weflow Conversation Intelligence captures from your meetings. Use it to push data into a data warehouse, sync recordings into internal tools, or trigger workflows in other systems.

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

limit

integer

Number of recordings per page (default 20)

cursor

string

Cursor from the previous response to fetch the next page

startDate

ISO 8601 datetime

Only return recordings on or after this date

endDate

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 (bot or other), whether the meeting was external, and conference URL

  • The linked Salesforce recording ID (if Weflow synced it to Salesforce)

  • Transcript and summary languages

  • The list of participants with name, email, and role (host or 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}/video

Returns pre-signed S3 URLs for the recording video:

  • streamUrl — for playback (e.g., embedding in a web player)

  • downloadUrl — for downloading the file

  • expiresAt — 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}/comments

Returns 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}/clips

Returns 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-metrics

Returns per-participant conversation analytics:

Metric

What it measures

talkRatio

Share of the meeting this person spoke

longestMonologue

Longest uninterrupted stretch of speech (seconds)

interactivityScore

Composite score for back-and-forth engagement

patience

How long this person waits before responding

questionsPerHour

Question rate normalized to hourly

totalQuestions

Total questions asked

transitionPauses

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:

  • speakerId and speaker (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:

  • coachingTemplateUid so you can map results back to the template

  • An overall block with a title, summary text, and numeric rating

  • A list of sections, each with its own title, text, rating, and items (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

templateId

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 key

  • 403 Forbidden — API not enabled for your workspace

  • 404 Not Found — recording UID doesn't exist or isn't accessible to your workspace

  • 429 Too Many Requests — rate limit exceeded; back off and retry


A typical integration pattern

For most use cases, the flow looks like this:

  1. Discover new recordings — poll GET /recordings on a schedule (e.g., every 15 minutes) using startDate set to the last sync time, paginating until hasMore is false.

  2. Enrich each recording — for any new UID, call GET /recordings/{uid} to pull metadata, participants, and Salesforce links.

  3. Pull the analytics you need — call interaction-metrics, comments, clips, and (from May) scorecards and the transcript endpoint as needed.

  4. Generate video URLs on demand — never cache streamUrl or downloadUrl; call /video at 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.

Did this answer your question?