FlowRunner
PricingContact
Theme
Start Free

SMSAPI

Messaging

Connect AI agents to SMSAPI, a European messaging gateway from LINK Mobility with SMS, RCS, and OTP support. Agents send and schedule SMS to numbers or contact groups, verify one-time passcodes, run HLR lookups, and manage contacts, templates, and subaccounts so large-scale messaging stays organized.

Verified 89 actions API key available
SMSAPI website ↗ Platform Documentation ↗ Capability data verified 2026-08-12
A segment in the CRM crosses the threshold that qualifies it for the reactivation campaign
List Contacts pulls the matching records with their user-defined fields, which are the values the message body will substitute
Get Account Profile reads the credit balance in points, and List Country Volumes reports how much of each per-country limit this month has already used
List Sender Names returns each registered name with its approval status, because the gateway accepts only a name currently marked ACTIVE
The operator receives the recipient count, the cost against the balance, and the country limits that are close to their ceiling
The operator names the sender to send under rather than letting an empty field fall to the account default, and only then does Send SMS To Contact Group run

What This Integration Enables

SMSAPI is operated by LINK Mobility Poland in Gliwice, part of the Norwegian LINK Mobility group, and it is the European gateway on this list that behaves least like a send endpoint. Roughly a third of its surface sends anything. The rest administers an estate. Registered sender names carry an approval status and a required declaration text. The contacts database has user-defined fields and per-group read, write, and send permissions. Alongside those sit reusable templates, a blacklist, an opt-out register with its own branded unsubscribe page, shortened cut.li links with click counts, and callback endpoints. Subaccounts come with their own object for what parent sender names and templates they may reach. If your messaging problem is really an access and governance problem wearing a messaging costume, this is the connector shaped for it.

Two structural facts change how a flow should be built here. The first is that SMSAPI runs two independent platforms with separate accounts and separate tokens, SMSAPI.com for the international market and SMSAPI.pl for Poland, and a token issued on one is rejected by the other. Both publish the same operation set, so every action works on either, but the platform is a configuration choice rather than a detail. A Polish account and an international account are two connections, not one. The second is that this API publishes no sent-message listing and no per-message status lookup. Delivery status arrives only on the DLR callback. That absence propagates: an agent cannot ask SMSAPI what it has sent, so anything a flow wants to reconcile later has to be recorded by the flow at send time, and the IDX correlation value that SMSAPI echoes back on the callback exists precisely for that.

RCS and managed verification sit alongside the SMS surface. Send RCS Message dispatches from a registered agent as plain text or as an RCS content object for rich cards and carousels, and List RCS Senders reports which agents the account may send from. Send Verification Code generates a one-time code, delivers it by SMS, and returns both the code and its identifier to the caller, which is worth knowing because it means the secret does enter flow data on this vendor rather than staying inside the gateway. Treat that value the way you would treat any credential passing through a workflow. There are no triggers on this connector even though a callback subscription API exists, because the reference documentation describes callbacks as fixed per-account slots and inbound events arrive as a plain query string with no signature or shared secret documented anywhere. The full callback management surface ships as actions instead, so a flow can point SMSAPI at an endpoint of your own and administer it from FlowRunner.

Without FlowRunner

Sender name chosen by omission Nobody sets the field, the account default applies, and the brand a customer sees is whatever was made default last
Country limits found at the error A destination stops accepting traffic mid campaign and the first signal is a rejection code nobody can attribute
Contacts kept in two places The messaging platform holds one version of a segment, the CRM holds another, and neither knows which is current

With FlowRunner

Sender name chosen per send The approval status of every registered name is read before the campaign, so a send never goes out under a name the gateway will not accept
Country limits read before the send Monthly volume against each per-country limit is on the table alongside the recipient count
Contacts maintained from the flow Groups, fields, and per-group permissions are managed through actions, so the messaging database is written by the same process that reads the CRM

Use Case Scenarios

A campaign priced against the limits that actually stop it

A Polish retailer wants a reactivation message sent to a stored contact group with each recipient's stored first name and last order date substituted into the body. The agent calls List Available Contact Fields first, because those field names are what [%contact.field name%] resolves against and a typo produces an empty substitution rather than an error. It reads Get Account Profile for the balance in points, then List Country Volumes, which reports monthly volume used against each per-country limit and is the thing that explains a destination rejection before it happens rather than after. It assembles the cost, the headroom, and the recipient count into one summary and stops. Send SMS To Contact Group runs on release, not on assembly.

Giving a subaccount exactly one segment and exactly one sender

A regional team needs to run its own sends without access to the parent account's whole estate. The agent creates the subaccount with Create Subaccount, allocating credit as a transfer from the parent balance plus a monthly grant, then calls Update Subaccount Sender Name Access and Update Subaccount Template Access to grant a named selection rather than everything. It adds a per-group right with Add Group Permission so the team can read and send to one segment and cannot touch the rest of the contacts database. This is a governance change made by a flow, which means it is also logged like one. Selecting a named list replaces the whole prior selection, so the agent reads the current access with Get Subaccount Sender Name Access before it writes, and includes the diff in what it reports to Slack.

Suppression that runs itself and deletion that does not

An unsubscribe arrives on the branded opt-out page and a support ticket in Zendesk asks for the same number to be removed. The agent handles the reversible half without asking anyone: Add Blacklisted Number suppresses the number immediately, permanently or until a given date, and a send to a blacklisted number fails cleanly rather than reaching the handset. The irreversible half waits. Delete Contact removes the record to the trash, from which Restore Contacts Trash can recover it, but Empty Contacts Trash destroys it permanently and takes no filter at all, which is why the connector puts it behind an explicit confirmation toggle. The agent proposes the deletion set and a person confirms it.

Human-in-Loop Highlight

The gate on SMSAPI is retiring a sender name, and it is a gate because of what the API cannot tell you. Create Sender Name submits a name to SMSAPI's manual review and it starts INACTIVE, so a name is not something a flow can restore in the time it takes to notice the mistake. Only a name currently marked ACTIVE is accepted by the gateway. Set Default Sender Name decides what every send that names no sender goes out under. And there is no sent-message listing route on this API, which means an agent asked to tidy up unused sender names has no way to enumerate what is still using them. It cannot see scheduled sends, it cannot see which templates a subaccount has referenced, and it cannot see the traffic history that would settle the question. The evidence a careful agent would want to gather does not exist here.

So the agent gathers everything that does exist and stops. It reads List Sender Names with approval status, checks which name is currently the default, calls Get Subaccount Sender Name Access for each subaccount to find every named selection that includes the candidate, and states the limit of its own knowledge out loud. What it posts is a question with the blind spot declared: "Retiring sender name SKLEP24. It is not the account default. Two of five subaccounts have it in a Selected Only list, so removing it drops it from their pickers as well. I cannot check whether any scheduled send or template already references it, because SMSAPI publishes no sent-message listing. Confirm retirement, or set a replacement default first?" A person answers that in the Flow conversation, and the answer is what runs Delete Sender Name.

That is the shape human-in-the-loop takes under Orchestration as a Service. The agent is not asking permission for a routine act. It is reporting that a specific piece of evidence is unobtainable on this platform, and that the decision therefore rests on something a person knows and the API does not. Three other actions belong behind the same treatment for the same structural reason. Delete All Contacts, Delete All Contact Groups, and Empty Contacts Trash accept no filter whatsoever, so their blast radius is the whole database by definition, and the connector gates each behind an explicit confirmation toggle. Remove Contacts From Group By Query is the quieter sibling: its request body makes every filter optional, so an empty selector would match the entire contacts database and empty the group. The connector refuses a filterless call locally, which turns a silent disaster into a question worth asking.

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

Agent Capabilities

89 actions

Messaging

3
  • Send SMS Sends one body to a list of numbers, under an approved sender name or a saved template, with `[%1%]` to `[%4%]` personalization and per-recipient IDX correlation values echoed on the delivery callback. Also supports scheduling, an expiry deadline, flash and priority delivery, encoding selection, sending-hours behavior, duplicate handling, a voice fallback, and a free no-charge test mode.
  • Send SMS To Contact Group Sends one body to every contact in a named group, substituting stored contact fields with `[%contact.field name%]`. Separate from Send SMS because SMSAPI rejects a request that combines a group with personalization parameters.
  • Cancel Scheduled Message Cancels a queued future send by its message identifier. The only recall mechanism on this API, and it works only while the message is still in the queue.

RCS

3
  • Send RCS Message Sends a single RCS message from a registered agent, as plain text or as an RCS content object carrying rich cards and carousels. Use it where the handset supports RCS and the message benefits from structure rather than more characters.
  • List RCS Messages Lists RCS traffic with sent, delivered, read, and expired timestamps. Read receipts are an RCS capability SMS does not have, which makes this the reporting route with the most signal in it.
  • List RCS Senders Lists the RCS agents the account may send from. Read it before an RCS campaign, because an unregistered agent has nothing to send under.

Verification

2
  • Send Verification Code Generates a one-time code, sends it by SMS, and returns the code and its identifier. The body may be customized as long as it keeps the `[%code%]` placeholder. Note that the code is returned to the caller, so it becomes flow data.
  • Verify Verification Code Checks a code the user entered against the one issued. The branch point for a signup or login flow that outsourced code generation to the gateway.

Number Lookup

1
  • Look Up Numbers In HLR Queries the Home Location Register for up to 20 numbers, returning network, country, and ported status. Billed per lookup, and the full result also arrives at the account's HLR callback.

Sender Names

6
  • List Sender Names Returns every registered name with its approval status. The check to run before a campaign, because the gateway accepts only a name currently marked ACTIVE.
  • Get Sender Name Reads one registered name and its current status. Used when a flow holds a specific name and needs to confirm it is still usable.
  • Create Sender Name Submits a new name for SMSAPI's manual review. It starts INACTIVE and becomes usable only when a person at the vendor approves it, so this is a request rather than a provisioning call.
  • Delete Sender Name Removes a registered name from the account. Getting it back means submitting it for manual review again, and this API publishes no sent-message listing that would show what still references it.
  • Set Default Sender Name Makes one name the account default used when a send specifies no sender. It changes the brand on every future send that leaves the field empty, across every flow on the account.
  • Get Sender Name Statement Returns the declaration text SMSAPI requires alongside a name registration. Read it when a flow is assembling a registration for a person to submit.

Templates

6
  • List SMS Templates Returns the templates this account owns.
  • List Available SMS Templates Returns this account's own templates plus those shared by the parent account. This is the list a subaccount should read, because the owned list alone will not show what it has been granted.
  • Get SMS Template Reads one template by identifier, including its placeholders and normalization flag.
  • Create SMS Template Creates a reusable message model with `[%1%]` to `[%4%]` placeholders and the normalization flag. The route to a campaign body that lives in one place instead of in five flows.
  • Update SMS Template Rewrites an existing template. Every future send that names it changes with it, including sends nobody is currently looking at.
  • Delete SMS Template Removes a template. A send that names a deleted template has nothing to render.

Account

4
  • Get Account Profile Returns the credit balance in points, company details, payment type, and whether the account is native or a subaccount. The balance check to run before a large dispatch.
  • List Prices Returns per-country and per-network pricing, optionally for one service, including whether receiving numbers and alphanumeric sender names are supported on each network. The route that converts a balance into a message count for a specific destination.
  • Get Service Status Reports reachability, whether the configured token is accepted, and which subservices are down. The only route that answers without a valid credential, which makes it the right health check.
  • List Country Volumes Returns monthly volume used against each per-country limit. This is what explains a destination rejection, and reading it before a campaign turns that rejection into a plan.

Blacklist

5
  • List Blacklisted Numbers Paged listing of suppressed numbers with a text query.
  • Add Blacklisted Number Blacklists a number, permanently or until a given date. The reversible half of a suppression request, safe for an agent to run without asking.
  • Delete Blacklisted Number By Phone Removes a number from the blacklist by the number itself. Un-suppression, so it belongs behind the same care as any consent change.
  • Delete Blacklisted Number By ID Removes a blacklist entry by its identifier. SMSAPI documents both removal routes separately; use whichever identifier the flow is holding.
  • Import Blacklisted Numbers Bulk imports blacklist entries from a file fetched from a URL you supply. The vendor declares this route with a single string field and gives no example, so treat it as unverified until confirmed against a live account.

Opt-Outs

4
  • List Opt-Outs Returns the records of recipients who unsubscribed through an `[%opt_out_link%]`. A send to an opted-out number fails rather than reaching the handset.
  • Delete Opt-Out Clears an opt-out record. This restores the number to sendable, which makes it a consent decision rather than a cleanup task.
  • Get Opt-Out Settings Reads the brand name shown on the unsubscribe page.
  • Update Opt-Out Settings Sets the brand name shown on the unsubscribe page. It is the last thing a leaving customer sees, so it is worth getting right.

Short URLs

5
  • List Short URLs Returns cut.li links with their click counts, names, and expiry windows.
  • Get Short URL Reads one shortened link and its click count.
  • Create Short URL Creates a named cut.li link with an expiry window. Per-recipient links generated inside a message are valid for 30 days, while a link identical for every recipient is valid for 10 years.
  • Update Short URL Changes an existing shortened link. Every message already sent carrying that link now points somewhere new, which is either the feature or the hazard depending on intent.
  • Delete Short URL Removes a shortened link. Messages already delivered that carry it stop resolving.

Callbacks

9
  • List Callbacks Returns the endpoints SMSAPI pushes events to, across delivery reports, inbound messages, voice reports, bulk dispatch starts, HLR results, and short-link clicks.
  • Get Callback Reads one registered callback endpoint and its configuration.
  • Create Callback Registers an endpoint for a given event type. Because the reference documentation describes callbacks as fixed per-account slots, read the existing set before creating one.
  • Update Callback URL Changes where an existing callback delivers. A quiet action with loud consequences if the previous endpoint was somebody else's production listener.
  • Delete Callback Removes a callback registration entirely.
  • Activate Callback Resumes a suspended endpoint without recreating it.
  • Deactivate Callback Suspends an endpoint without deleting it. The right move when a downstream listener is being redeployed and you do not want events lost to repeated failures.
  • Test Callback Makes SMSAPI call the endpoint once and reports the HTTP status and body. The verification step after any callback change.
  • Get Callback Options Returns which event types the account is entitled to and which inbound numbers exist. Read it before assuming an event type is available.

Subaccounts

9
  • List Subaccounts Returns subaccounts with their descriptions, active flags, and credit allocations.
  • Get Subaccount Reads one subaccount, including its credit split between a transfer from the parent balance and a monthly grant.
  • Create Subaccount Creates a subaccount with its own credentials, a separate API password, a description, an active flag, and a credit allocation. The provisioning step for a regional team or a client.
  • Update Subaccount Changes a subaccount's description, active flag, or credit allocation. Deactivating one stops its sends without destroying its history.
  • Delete Subaccount Removes a subaccount. Its credentials stop working immediately, including in any flow elsewhere that holds them.
  • Get Subaccount Sender Name Access Reads whether a subaccount may use all, none, or a named selection of the parent's sender names. Read this before writing, because the write replaces rather than merges.
  • Update Subaccount Sender Name Access Sets that access. Choosing Selected Only replaces the whole selection, so a partial update expressed as a full write silently removes everything omitted.
  • Get Subaccount Template Access Reads whether a subaccount may use all, none, or a named selection of the parent's templates.
  • Update Subaccount Template Access Sets that access, with the same replace semantics as the sender name equivalent.

Contacts

12
  • List Contacts Paged listing with free-text search, sorting, and exact filters on phone number, email, name, group, gender, and birthday. The read that assembles a segment.
  • Get Contact Reads one contact with its stored fields.
  • Create Contact Creates a contact. SMSAPI requires both a phone number and an email address on creation, which is worth knowing before mapping a source that only has one.
  • Update Contact Updates a contact's stored fields, which are the values that `[%contact.field name%]` substitutes at send time.
  • Delete Contact Moves a contact to the trash. Recoverable with Restore Contacts Trash until the trash is emptied.
  • Delete All Contacts Deletes the whole contacts database. It takes no filter of any kind, so the connector gates it behind an explicit confirmation toggle.
  • Get Contact Groups Returns which groups a contact belongs to.
  • Check Contact Group Membership Tests whether one contact is in one group, which is the cheap check before a membership write.
  • Assign Contact To Group Adds one contact to one group, leaving its other memberships intact.
  • Remove Contact From Group Removes one contact from one group.
  • Restore Contacts Trash Restores every deleted contact from the trash. The undo that makes Delete Contact survivable.
  • Empty Contacts Trash Destroys every trashed contact permanently. It takes no filter, so the connector gates it behind an explicit confirmation toggle.

Contact Groups

9
  • List Contact Groups Returns the account's groups. The listing supports SMSAPI's own name operators, where a bare value matches loosely, `eq(Name)` matches exactly, and `eqi(Name)` matches exactly and case-insensitively.
  • Get Contact Group Reads one group and its settings, including any per-group contact expiry period.
  • Create Contact Group Creates a group, optionally with a contact expiry period so membership ages out on its own.
  • Update Contact Group Changes a group's name or expiry period.
  • Delete Contact Group Deletes a group, optionally deleting its contacts too. The optional part is the part to read twice.
  • Delete All Contact Groups Deletes every group on the account. It takes no filter, so the connector gates it behind an explicit confirmation toggle.
  • Add Contacts To Group By Query Adds every contact matching a search to a group, keeping existing memberships. Requires at least one filter, because the vendor's request body makes them all optional.
  • Move Contacts To Group By Query Moves every contact matching a search into a group, replacing their existing memberships rather than adding to them.
  • Remove Contacts From Group By Query Removes every contact matching a search from a group. With an empty selector this would match the entire database and empty the group, which is why the connector refuses a filterless call.

Group Permissions

5
  • List Group Permissions Returns per-user read, write, and send rights across contact groups.
  • Get Group Permission Reads one permission entry.
  • Add Group Permission Grants a user read, write, or send rights on one contact group. This is how a parent account shares a single segment with a subaccount instead of the whole database.
  • Update Group Permission Changes an existing permission entry.
  • Delete Group Permission Revokes a user's rights on a group. Their sends against it stop working immediately.

Contact Fields

6
  • List Contact Fields Returns the account's user-defined fields.
  • List Available Contact Fields Returns built-in and user-defined fields together, each flagged with whether it is built in. Read it to discover the exact names `[%contact.field name%]` will resolve against.
  • Create Contact Field Adds a user-defined field to the contacts database.
  • Update Contact Field Renames or reconfigures a field. Every message body referencing the old name stops substituting, so a rename is a content change as much as a schema change.
  • Delete Contact Field Removes a field and the values stored under it across the database.
  • List Contact Field Options Returns the values already stored across the database for one field. Useful for building a segment from real data rather than assumed categories.

Frequently Asked Questions

What can FlowRunner do with SMSAPI?

FlowRunner agents can run Send SMS, Send SMS To Contact Group, and Cancel Scheduled Message in SMSAPI, plus 86 more actions.

Does connecting SMSAPI to FlowRunner require OAuth?

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

Can SMSAPI trigger a FlowRunner workflow automatically?

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

Start building with SMSAPI

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