FlowRunner
PricingContact
Theme
Start Free

Termii

Messaging

Connect AI agents to Termii, a Nigerian messaging and verification platform. Agents send messages over SMS, WhatsApp, voice, and email, generate and verify one time passwords, manage phonebooks and campaigns, and check delivery reports so customer messaging and verification run at scale.

41 actions API key available
Termii website ↗ Platform Documentation ↗ Capability data verified 2026-08-12
A signup, a transaction or a schedule opens an outbound message to a Nigerian or wider African audience
Check Do Not Disturb Status reports whether the number has DND active and which network it is currently on
The route is chosen from that answer, since Generic does not reach DND numbers and is time restricted for promotional traffic in Nigeria
List Sender IDs confirms the chosen sender is approved and active rather than pending or blocked
Send Message delivers over SMS, WhatsApp, voice or email, or Send Token issues a one time password Termii generates and later verifies
Get Message History returns the delivery report with recipient, cost, status and message identifier
A failed campaign stops for a person before Retry Campaign runs, because the retry re dispatches to the whole phonebook and charges again

What This Integration Enables

Termii is a Nigerian messaging and verification platform, and choosing it is a statement about where your customers are rather than a preference between gateways. The regulatory environment it is built for shows up directly in the API. Promotional traffic on the Generic route is not delivered to Nigerian MTN numbers between 8PM and 8AM West Africa Time, and it is not delivered at all to numbers with do not disturb active. That is why a separate Do Not Disturb route exists for transactional and one time password traffic, and why Termii activates that route per account. Sender IDs go to a manual review team and are not usable until their status becomes active. Sending campaigns over the DND route additionally requires the sender ID to be whitelisted by Termii support. None of that is friction this connector can remove, but all of it is state an agent can read before a send instead of inferring from a disappointing delivery report afterwards.

The second half of the product is verification, and it is the more interesting half. Termii issues one time passwords over SMS, over an automated voice call, by email, and in app, and it distinguishes cleanly between codes it generates and stores, which Verify Token can check, and codes your own application generates, which it cannot. Send Token generates the code, substitutes it into your message where the placeholder sits, sends it and returns an identifier while never returning the code itself. Generate In-App Token returns the code to you instead of delivering it, for display in your own product or delivery over a channel Termii does not handle, and it is still verifiable. That distinction is worth designing to, because building a fallback chain on the wrong one leaves you with a code nobody can check.

There are no triggers here, and the reason is specific rather than incidental. Termii documents its webhook payloads well, including delivery reports, inbound messages and device offline notifications with an HMAC signature over the payload, but it publishes no subscription API at all. The URL is set by hand in the developer console, which means a trigger could neither register its own callback nor avoid overwriting the account's production delivery report endpoint. Get Message History is the supported polling substitute. Note that this connector was built from Termii's published reference and probe confirmed authentication behavior rather than from a live account, and a handful of response shapes are documentation derived rather than observed. Failed sends, DND blocks and pending sender IDs surface as automation exceptions rather than as a number that quietly under performs.

Without FlowRunner

Route chosen by habit Promotional traffic goes out on the route that cannot reach DND numbers, and the resulting gap reads as poor deliverability
A failed campaign is retried on reflex The retry re sends to everyone including the people who already received it, and the reason for the original failure is unchanged
Verification spread across channels and codes SMS, voice, email and in app codes are generated by different systems, and each one owns its own expiry and attempt counting

With FlowRunner

Route chosen from the number's own state DND status and network are read first, and transactional traffic is routed where it can actually land
A retry is a decision with the split in front of it Delivered and failed counts, cost and the regulatory explanation are stated before anyone re spends
Verification is one surface with one verifier Termii generates the code, substitutes it into the message and returns an identifier that Verify Token checks against, across SMS, voice and in app

Use Case Scenarios

Verification that survives a bad SMS route

A fintech onboarding flow needs a code in front of a new customer. The agent calls Send Token on the Do Not Disturb route, because the Generic route neither reaches numbers with DND active nor delivers promotional traffic overnight in Nigeria, and an onboarding code that arrives at 8AM is a lost signup. If the delivery report from Get Message History shows the message did not land, Send Voice Token reads the same class of code over an automated call with no sender ID required, which reaches a handset that cannot receive text. Verify Token then checks the customer's input against the identifier, counting each attempt against the limit set when the token was created. The account record in Postgres is updated only on a verified answer, and a customer who exhausts their attempts is handed to a person rather than silently locked out.

A phonebook campaign priced before it is sent

A lender runs repayment reminders to a stored audience. Contacts arrive as a CSV that Upload Contacts fetches from a URL and forwards, with Termii importing in the background, so the agent polls List Contacts to confirm the import rather than trusting the acknowledgement. Get Account Balance gates the dispatch. Send Campaign goes to every contact in the phonebook, substituting per contact columns for a personalized run, and Get Campaign afterwards returns the cost, the recipient totals and the delivered and failed counts. Those numbers reconcile into Google Sheets, and the failed portion is the input to the next scenario rather than something to re run on instinct.

Cleaning a list against the network rather than a regex

Before an expensive push, Query Number Status runs a live network lookup that detects fake and ported numbers and reports the operator and line type. Check Do Not Disturb Status runs alongside it. Between them the list splits three ways: numbers that can take promotional traffic on the Generic route, numbers that need the Do Not Disturb route and a whitelisted sender ID, and numbers that are not real. The third group is written back to the CRM as bad data instead of being dialed and counted as reach. Both lookups are activated per account by Termii, so a flow that depends on them checks the account can actually use them before it builds the split.

Human-in-Loop Highlight

The gate on Termii is Retry Campaign, and it earns the gate because of what campaign failure means on this platform specifically. Elsewhere a failed send is usually transient and a retry is the obvious fix. Here a large share of failures are regulatory: promotional traffic on the Generic route does not reach numbers with do not disturb active, and in Nigeria it is not delivered to MTN numbers between 8PM and 8AM. A retry does not change any of that. What it does do is re dispatch the campaign message to the entire phonebook and charge for it again, which means the people who did receive it get it a second time, and the people who did not receive it fail for exactly the same reason as before. The action is a re send, not a repair, and its name invites the opposite reading.

So an agent that sees a campaign in a failed state gathers the evidence and stops. Get Campaign returns the message body, the sender, the phonebook, the cost, the recipient totals and the delivered and failed split. Check Do Not Disturb Status can be sampled across the failed portion to show whether the failures cluster on DND numbers. Into Slack it says: "Campaign 'March repayment reminder' shows 4,180 delivered and 2,930 failed at a cost of 71,400 NGN. A sample of 100 failed numbers shows 84 with DND active, and the campaign ran at 20:40 on the Generic route. Retry Campaign re sends to the whole phonebook and bills again, including the 4,180 already delivered, and would not change the DND outcome. Retry, or rebuild the failed segment on the Do Not Disturb route with a whitelisted sender ID?"

A person who knows what a second reminder costs the customer relationship answers that in seconds. An agent optimizing for the failure count in front of it would have pressed retry, doubled the spend, double texted four thousand customers and delivered nothing new. This is the digital andon cord placed at the point where the platform's own vocabulary is misleading, which is exactly where Orchestration as a Service has to put it. Note what the gate is not. It is not an approval on message copy, and it is not a spend approval on ordinary sends, which Get Account Balance settles without a human. It is a judgment about whether a repeat message is a repair or a nuisance, and that question has no field in the API.

Agent processes routinely
Detects exception requiring judgment
Clear match Continues automatically
Ambiguous Routes to human via Slack
Human decides
Agent resumes with decision

Agent Capabilities

41 actions

Messaging

4
  • Send Message Sends a text message to up to a hundred recipients across any Termii routing channel. Choose Generic for promotional traffic, Do Not Disturb for transactional and one time password traffic that must reach DND numbers, WhatsApp over the official Business Platform, or Voice to convert the text to speech and place an automated call.
  • Send WhatsApp Message Sends a session message over WhatsApp, optionally carrying an image, audio file, document or video instead of text. Media requires Termii's High Volume WhatsApp tier and the URL must be publicly downloadable or the message is not delivered.
  • Send Bulk Message Sends the same SMS to a list of up to a hundred numbers over the Generic or Do Not Disturb route. The form to use when the recipient list is always a list rather than a stored audience.
  • Send Message From Termii Number Sends from a Termii generated number that adapts to the recipient's location, so no registered sender ID is needed. Useful for two way conversations and for markets where sender ID registration is not yet complete.

Campaigns

4
  • Send Campaign Sends to every contact in a stored phonebook, immediately or at a scheduled time. Personalized campaigns substitute per contact columns, regular campaigns send identical text, and link click tracking and duplicate removal are optional.
  • List Campaigns Returns every campaign sent from the account, newest first, with run time, delivery status, phonebook, type and recipient count in a paged envelope.
  • Get Campaign Returns one campaign in full, including the message body, sender, phonebook, cost, recipient totals and delivered and failed counts. This is the read that has to happen before anyone considers a retry.
  • Retry Campaign Re runs a campaign that previously failed. It dispatches the message to the phonebook again and is charged as a new send, so it repeats delivery to everyone who already received it and does not change a failure that was regulatory rather than transient.

Phonebooks

4
  • List Phonebooks Returns every phonebook with its identifier, name, contact count and creation date. The identifier returned here is what the contact and campaign operations require.
  • Create Phonebook Creates an empty phonebook, which becomes addressable as a campaign audience once contacts are added.
  • Update Phonebook Renames a phonebook and replaces its description. Termii marks both fields required, so supply the current value for whichever one is not changing.
  • Delete Phonebook Permanently deletes a phonebook and the contacts stored in it. Campaigns already sent remain in the history, but the audience is gone and cannot be recovered.

Contacts

4
  • List Contacts Returns the contacts of one phonebook with the phonebook's own summary and the column headers used for personalized campaigns.
  • Add Contact Adds one contact. Only the phone number is required; email, name and company are stored alongside it and become personalization columns.
  • Upload Contacts Fetches a CSV from a URL and forwards it as a multipart upload. Termii imports in the background, so the response acknowledges the upload rather than reporting the final count, and List Contacts confirms the result.
  • Delete Contacts From Phonebook Calls Termii's contact deletion endpoint for a phonebook. Termii publishes no parameter table and no contact selector for this route, so how many contacts it removes is decided by the API and cannot be narrowed from here. Verify against a disposable phonebook before using it on a production audience.

Sender IDs

2
  • List Sender IDs Returns every registered sender ID with its approval status, country and request date. Only an active sender ID is accepted as the From value on a send.
  • Request Sender ID Submits a new sender ID for Termii's manual review. It is not usable immediately, so poll the list until the status becomes active rather than sending against it.

Tokens

6
  • Send Token Generates a one time password, substitutes it into your message where the placeholder appears, sends it by SMS and returns an identifier. The code itself is never returned, which is what makes this the safe default for verification.
  • Send Voice Token Generates a one time password and reads it over an automated call, with no sender ID required. Returns an identifier for verification and never returns the code, which makes it the correct fallback when SMS is unreliable.
  • Send Voice Call Token Places an automated call that reads out a code you generated yourself. Termii does not store it, so it cannot be checked with Verify Token and your own application owns the verification.
  • Generate In-App Token Generates a one time password and returns it in the response instead of delivering it, for display in your own product or delivery over a channel Termii does not handle. It remains verifiable with Verify Token.
  • Verify Token Checks a user's input against an identifier from Send Token, Send Voice Token, Send Email Token or Generate In-App Token. Termii answers with a verified flag returned as the string "True" rather than a JSON boolean, so compare it as text. Each attempt counts against the limit.
  • Send Email Token Delivers a code you generated to an email address using a dashboard email configuration. Termii does not store the code, so it cannot be checked with Verify Token.

Email

1
  • Send Email Notification Sends a templated product notification using a template and an email configuration created on the dashboard. Every placeholder the template declares must be supplied, or the merge leaves it unresolved in the message the customer receives.

WhatsApp Templates

2
  • Send WhatsApp Template Message Sends a pre approved WhatsApp template to one recipient, supplying a value for every placeholder the template declares. Authentication templates accept only the code value and no other variables.
  • Send WhatsApp Template Media Message Sends a pre approved template carrying an image, document or video. The media URL must be publicly reachable and directly downloadable, and authentication templates cannot carry media at all.

Insights

5
  • Get Account Balance Returns the wallet balance and currency for the connected account, which is the gate to put in front of a bulk send or a campaign.
  • Get Message History Returns delivery reports across SMS, voice, email and WhatsApp with recipient, body, cost, status and identifier. This is the polling substitute for the delivery report webhook Termii offers no subscription route for.
  • Get Message Analytics Returns message history filtered by identifier, phone number or date range. This route appears in Termii's Postman collection rather than its online reference, so its response shape is not formally published and is worth confirming against a live account.
  • Check Do Not Disturb Status Reports whether a number has do not disturb active and which network it is currently on, which is the read that decides which route a message should go out on.
  • Query Number Status Runs a live network lookup detecting fake and ported numbers, with operator, line type and routing detail. Termii activates it per account, so confirm it is available before a flow depends on it.

eSIM

9
  • List eSIM Data Plans Returns the Sotel data plans available with allowance, validity, price and covered countries, filterable by country and by local or regional scope. The product identifier returned here is what provisioning and top up require.
  • Create eSIM Provisions a new eSIM on a chosen plan and returns the ICCID, IMSI, activation code and SMDP address. This is a billed purchase.
  • Purchase eSIM Data Plan Tops up an existing eSIM or attaches a new plan to it. Also a billed purchase, applying to an eSIM previously provisioned.
  • Get eSIM QR Code Returns the installation QR code for a provisioned eSIM, which is one of the two ways an end user installs the profile.
  • Get eSIM Profile Returns the euICC profile with IMSI, current state, release and last operation dates, remaining reuse count, activation code and SMDP address.
  • Get eSIM Data Usage Returns gigabytes consumed against gigabytes purchased, which is the read that decides when a top up should be offered rather than reacted to.
  • Get eSIM Data Plan Status Returns whether a plan is not yet active, running or expired, with its activation window and the last date by which it must be activated to stay valid.
  • List eSIMs Returns every eSIM the account has provisioned in a paged envelope, for reconciling inventory against your own records.
  • List eSIM Countries Returns the countries where the service is available with their ISO codes. The three letter code is the value provisioning and top up expect.

Frequently Asked Questions

What can FlowRunner do with Termii?

FlowRunner agents can run Send Message, Send WhatsApp Message, and Send Bulk Message in Termii, plus 38 more actions.

Does connecting Termii to FlowRunner require OAuth?

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

Can Termii trigger a FlowRunner workflow automatically?

Termii doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

Start building with Termii

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