Fluents AI
Voice & TelephonyPlace 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.
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
With FlowRunner
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 Capabilities
11 actionsCalls
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 triggersEvent 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.