FlowRunner
PricingContact
Theme
Start Free

Fluents AI

Voice & Telephony

Place and manage AI voice-agent phone calls with the Fluents Hosted API, starting outbound calls, ending live calls, and pulling transcripts. Agents run phone work and keep the transcript with the record.

1 trigger 11 actions API key available
Fluents AI website ↗ Platform Documentation ↗ Capability data verified 2026-08-01
On New Call fires as a call lands on the account, oldest first
Agent runs Get Call and reads status, stage and stage outcome alongside the transcript
Agent separates the calls that never connected from the conversations that connected and then went wrong
Agent writes the transcript and the stage outcome onto the matching record, so the reason is stored rather than inferred
Agent posts every transfer_unanswered result into the channel that owns the handoff, because that is a person who did not pick up
When a call is still in_progress well past the expected duration, the agent asks the owner before End Call hangs up on a live conversation

What This Integration Enables

Fluents AI is a deliberately narrow surface, and the narrowness is the point. Place a call with an agent configuration, retrieve it with its transcript, list what happened, hang one up, and register webhooks. There is no contact book, no tagging layer and no campaign object. It expects to sit inside something else, which is exactly the shape a connector should have when the orchestration lives above it.

What Fluents does give you, which most AI calling APIs do not, is an explicit vocabulary for how a call ended. Status is one of not_started, in_progress, error or ended. Stage is one of created, picked_up, transfer_started or transfer_successful. Stage outcome is one of human_unanswered, call_did_not_connect, human_disconnected, bot_disconnected, transfer_unanswered or transfer_disconnected. Those distinctions carry real operational weight. A human_unanswered is worth retrying tomorrow. A call_did_not_connect points at the number. A transfer_unanswered is not a telephony problem at all, it is a teammate who did not pick up, and it belongs in a channel where somebody owns it. Building retry and escalation logic on that vocabulary produces behaviour that matches what actually happened rather than a blanket rule applied to everything that did not succeed.

The connector is also honest about what it does not validate. Create Call models agent, telephony provider, context and telephony params as free-form JSON, because the Fluents API documents them as untyped objects with no inner fields, so they pass through exactly as supplied. That means the first dial with a new configuration is also the first time it is checked, which is worth knowing before the flow points it at a list.

Without FlowRunner

"The call failed" The outcome is a single failed flag that covers a voicemail, a wrong number and a dropped transfer
Transcripts stay in the dashboard Reading what the voice agent actually said means opening another tool
Stuck calls run on A call that never ends keeps running and nobody sees it until the bill arrives

With FlowRunner

The failure has a name Each call carries a stage and a stage outcome, so retry logic can tell one failure from another
Transcripts land on the record The conversation is stored with the customer it was about, as it lands
Long-running calls escalate A call past its expected duration is raised to a person while it is still connected

Use Case Scenarios

Retry logic that reads the actual outcome

An agent handles the aftermath of every outbound call the same way it landed: through On New Call, oldest first. It runs Get Call, reads the stage and stage outcome, and branches on them rather than on a single success flag. human_unanswered schedules another attempt inside the contact's calling window. call_did_not_connect flags the number for verification instead of burning three more attempts on a line that does not exist. human_disconnected, where the person picked up and then hung up, is written to the record as exactly that and excluded from automatic retries entirely, because dialling someone again who just ended the call is the fastest way to earn a complaint.

Transcripts posted where the handoff lives

Get Call returns the transcript along with the timing, stage and action history. For calls that reached transfer_successful, the agent posts the transcript into the Slack channel that owns the handoff so the person who took the transfer has the first half of the conversation in front of them. For calls that reached transfer_started and ended at transfer_unanswered, it posts a different message, naming the call, the customer and the fact that the transfer went unanswered, because that outcome is a staffing signal and not a telephony fault.

Dialling from the system of record

A newly qualified lead in HubSpot is ready for a call. The agent runs List Agents to select the configuration matched to that segment and its language, List Phone Numbers to pick a number that is active and permitted for outbound, and assembles the context object with the fields the voice agent should know. Because Fluents passes those objects through unchanged, the agent validates the payload against a stored known-good shape before it dials rather than discovering a malformed context in a live conversation. Create Call returns the record and its ID, and the flow waits for On New Call to bring the result back around.

Human-in-Loop Highlight

End Call is a blunt instrument, and that is exactly why a flow should not be allowed to reach for it alone. It hangs up an in-progress call by ID, and the person on the other end experiences that as being cut off mid-sentence. There is one situation where an agent genuinely needs it: a call sitting at status in_progress far past any reasonable duration for that conversation, which is either a stuck session burning telephony spend or a voice agent stuck in a loop with a real person on the line. The agent detects that from Get Call rather than guessing, then stops. It posts what it can see to the owner: "Call 8f2a to +1 512 555 0148 has been in_progress for 19 minutes against an expected 4. Stage is picked_up, no transfer started. Transcript so far attached. End the call, or leave it running?" The owner reads the transcript, which is usually enough to tell a genuine long conversation from a loop, and answers. Nothing hangs up on a customer because a threshold fired. That is the digital andon cord working the way it should: the agent recognises the anomaly and pulls the cord, and the judgment call stays with a person.

Agent processes routinely
Detects that from Get Call rather than guessing
Clear match Continues automatically
Ambiguous Routes to human via preferred channel
Human decides
Agent resumes with decision

Agent Capabilities

11 actions

Calls

4
  • Create Call Places an outbound call to a given number using the supplied agent configuration and telephony provider. The Fluents API models agent, telephony provider, context, telephony params, telephony metadata and telephony account connection as free-form JSON with no published inner fields, so each is passed through exactly as supplied. Returns the created call record with its ID and status.
  • Get Call Retrieves one call by ID with its transcript, recording availability, timing, stage and action history. Status is one of not_started, in_progress, error or ended. Stage is one of created, picked_up, transfer_started or transfer_successful. Stage outcome is one of human_unanswered, call_did_not_connect, human_disconnected, bot_disconnected, transfer_unanswered or transfer_disconnected.
  • List Calls Returns a paginated list of calls with status, stage, stage outcome, numbers, timing and transcript availability. The Fluents API marks every pagination parameter as required, so page, size, sort column, sort direction and filters are always sent with sensible defaults applied.
  • End Call Ends an in-progress call by ID and returns the updated record. Used to hang up a call that is still connected, and only after a person has approved, because the other party experiences it as being cut off.

Agents and Numbers

3
  • Get Agent Retrieves one agent by ID with its prompt, voice, language, actions, transcriber and post-call configuration. Agent language is one of en, es, de, hi, pt, fr, nl, id, it, ja or ko.
  • List Agents Returns a paginated list of agents with their prompts, voices, languages and call settings. Used to select the configuration matched to a segment before dialling.
  • List Phone Numbers Returns a paginated list of numbers on the account including whether each is active, whether it is outbound-only, and which inbound agent answers it. Used to pick a permitted caller ID.

Webhooks

4
  • Create Webhook Registers a webhook that Fluents posts call events to. Documented subscription tokens are event_message, event_action, event_transcript and event_post_call_processing_completed, with further event types selectable in the Fluents dashboard. Fluents webhooks are unsigned, so a secret, unguessable receiving URL is used.
  • Get Webhook Retrieves one registered webhook by ID with its target URL, delivery method, label and subscribed event types.
  • List Webhooks Returns a paginated list of registered webhooks with their URLs, delivery methods and event subscriptions. Used to audit what the account is already sending and where.
  • Update Webhook Updates an existing webhook by ID, changing the target URL, delivery method, label or event subscriptions. The Fluents API exposes no delete-webhook endpoint, so webhooks are removed from the Fluents dashboard.

Triggers

1 triggers

Event Triggers

1
  • On New Call Polls the account's call list and fires for each newly seen call, oldest first. The first poll only records the calls that already exist, so history is never replayed. Fluents publishes no delete-webhook endpoint, which is why this is a polling trigger rather than a registered subscription that could not be cleanly removed. Used to run post-call handling as calls land, branching on the stage outcome rather than on a single success flag.

Frequently Asked Questions

What can FlowRunner do with Fluents AI?

FlowRunner agents can run Create Call, Get Call, and List Calls in Fluents AI, plus 8 more actions.

Does connecting Fluents AI to FlowRunner require OAuth?

No. Fluents AI connects to FlowRunner with an API key, no OAuth flow required.

Can Fluents AI trigger a FlowRunner workflow automatically?

Yes. Fluents AI supports 1 trigger that can start a FlowRunner workflow automatically.

Start building with Fluents AI

$100 in credits. No card required. Connect in minutes.