FlowRunner
PricingContact
Theme
Start Free

ProSMS

Messaging

Connect AI agents to ProSMS, a Scandinavian SMS gateway operated by Compaya with EU-resident data storage. Agents send and schedule SMS to individuals or contact groups, read delivery logs, and manage contacts and sender names so Nordic customer messaging stays auditable and on time.

Verified 24 actions API key available
ProSMS website ↗ Platform Documentation ↗ Capability data verified 2026-08-11
A schedule or an upstream booking change opens the run, because ProSMS delivers reports to a per message callback with no subscription API and this connector ships no triggers
The audience is resolved to a ProSMS contact group rather than to a list of raw numbers, so the send, the log, and the address book agree
Get Credit Balance confirms the account can cover the send, since a group send is rejected outright when the balance cannot pay for it
Send SMS To Group dispatches to the group, scheduled at least ten minutes out so the cancellation path stays open
List SMS Log reads back per message delivery status, sender, credit cost, and batch identifier
Rejected and expired entries go to the team with the contact record attached
A person approves any address book cleanup that could delete contacts outside the group being cleaned

What This Integration Enables

ProSMS is the Scandinavian gateway operated by Compaya, which describes itself as an ISAE 3000 audited, GDPR compliant provider with EU resident data storage. That description is the vendor's own, and it is also the reason a Nordic operations team picks this over a global aggregator. For a Swedish or Danish business sending customer data through a messaging platform, where the data sits is not a preference. It is a procurement requirement that has to survive a review. This connector is built and verified against Compaya's published API, and it exposes the brand as a config item, because one gateway is sold under three of them.

That last point deserves stating clearly, since it is the first thing that goes wrong. Compaya sells the same gateway as ProSMS Sweden, ProSMS Denmark, and SMS.dk. The routes, request bodies, response envelopes, error codes, and authentication are identical across all three. Only the host differs, and accounts and API keys are issued per brand and are not interchangeable: a key from one brand sent to another brand's host is rejected as invalid. If every call fails while the same key works in the vendor's web interface, the brand setting is the thing to check before anything else. Switching brand on an existing connection points it at a different account, not at a different view of the same one.

The API's real center of gravity is the address book. Contacts, groups, and the memberships between them are first class, with contacts addressable by identifier or by phone number, up to twelve free form data fields each, and a deactivated state that suppresses without deleting. Sends come in three forms:

  • A direct send to numbers, with full formatting, scheduling, and per recipient accepted or rejected reporting.
  • A group send that addresses whole groups and offers a compact response mode returning a count instead of the full accepted list, which is the practical choice at scale.
  • A simple send that takes its arguments as path segments, for constrained clients.

Prefer the direct send, because the simple form puts the API key in the request URL where servers, proxies, and browsers log it. Scheduling has a ten minute floor and Delete Scheduled SMS matches by batch identifier or by your own user reference, which together make a scheduled campaign genuinely recallable rather than nominally so.

Without FlowRunner

Audiences rebuilt as raw number lists Every campaign posts a fresh list of numbers, so the log has no group to reconcile against
Cleanup done with a broad delete A group is tidied by removing contacts, and nobody tracks which of them existed in no other group
Delivery status assumed from the send response The batch was accepted, so the campaign is recorded as delivered

With FlowRunner

Audiences maintained as groups Groups are the unit of sending and the unit of reconciliation, and the address book stays the source of truth
Cleanup scoped and reviewed The destructive form of a group cleanup is separated from the safe form, and only the safe one runs unattended
Delivery status read back per message The log carries a status, a sender, a credit cost, and a batch identifier for every message, and the failures route to a person

Use Case Scenarios

Appointment reminders that reconcile against the booking system

A Swedish clinic reminds patients the day before. The agent resolves each day's appointments to contacts in the ProSMS address book by phone number, sends with a user reference carrying the booking identifier, and schedules for the following morning. Because the reference is set on the send, two things become possible that would not be otherwise. List SMS Log can be filtered by that reference, so a specific booking's message can be traced without guessing at timestamps. And Delete Scheduled SMS can cancel by reference, so a patient who cancels at nine in the evening does not receive a reminder at eight the next morning. Cancellations arriving after dispatch are a different case, and they go to reception in Slack with the message body and the send time attached, because at that point a person needs to call rather than a system needs to retry.

Group membership that reflects the CRM without rebuilding it

A retailer keeps segments in HubSpot and sends from ProSMS, and the two drift constantly. A nightly agent reconciles them using the operations built for exactly this: Add Contact To Group creates the contact if it does not already exist, and the response code distinguishes created from updated so the flow knows which happened without a separate lookup. Move Contacts Between Groups handles a customer changing segment in one call, returning moved and failed lists so partial results stay visible rather than being collapsed into a success flag. Remove Contact From Group takes a person out of a segment while retaining the contact itself, which is the correct and non destructive operation for the vast majority of membership changes. Anything that fails is written to Google Sheets for review as an automation exception, with the group and the number, since a failure here means an audience is quietly wrong.

Delivery reconciliation without a trigger

ProSMS delivers reports by calling a per message URL with an HTTP GET, and the vendor does not document the callback's query parameters, so there is nothing to build a trigger against. This connector says so rather than approximating one. The supported path is List SMS Log, which reaches back three months, returns at most a thousand entries per call, and carries send time, delivery status, sender, body, credit cost, and batch identifier for each. A daily agent pages through the previous day, groups by status, and turns the rejected and expired entries into work. Rejected numbers go back to the CRM as bad contact data. Expired ones are candidates for a retry on a different channel. The aggregate credit cost is written to the finance record, so messaging spend is reconciled against sends rather than against invoices.

Human-in-Loop Highlight

The gate on ProSMS is Vacate Group, specifically the form that deletes orphans, and it is the gate because its blast radius extends beyond the thing being operated on. Vacate Group empties a group. With the delete orphans option, it also deletes any contact that ends up belonging to no group at all. That is a reasonable convenience when a person clicks it in the web interface, looking at a group they built and understand. It is something else entirely when an agent runs it as the last step of a segment rebuild, because the contacts that end up orphaned are not the ones the agent was thinking about. They are the people who were in this group and nowhere else, which frequently means the people some other process added quietly, or the ones whose second group membership was removed last week by a different flow. They are deleted from the whole address book, along with their data fields and their history in the SMS log's contact context, and the response is a count.

So the agent gathers the evidence first and then stops. List Contacts In Group returns the members. Get Contact By ID or Get Contact By Phone Number returns each one's group memberships. Which means the agent can compute the orphan set exactly, before anything is destroyed, and show it to somebody. Into Slack: "Segment rebuild wants to vacate group 214 (Kampanj Host 2026), 1,880 members. 47 of them belong to no other group and would be permanently deleted from the address book by the delete orphans option. 12 of those 47 received a message in the last 30 days. Vacate without deleting orphans, vacate and delete all 47, or delete a reviewed subset?" Offering the non destructive variant as the first option is deliberate, because it is almost always what was actually wanted.

That is the digital andon cord under Orchestration as a Service, applied to a delete whose scope is wider than its name suggests. It matters more on this platform than it would on another one. The reason a Nordic team chose Compaya is that customer data lives inside a controlled, audited environment, and quietly destroying records inside that environment through a cleanup step is precisely the outcome the choice was meant to avoid. Delete Multiple Contacts sits beside it for the same reason. Everything non destructive runs unattended: adding, moving, removing from a group, sending, scheduling, canceling a scheduled send, and reading the log, because none of those loses anything a person would want back.

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

24 actions

SMS

4
  • Send SMS Sends a message to one or more recipients in a single request, with support for long concatenated messages, GSM or Unicode alphabet, character encoding, a per message delivery report URL, your own user reference, and scheduling. Returns the batch identifier, the credit cost, and a per recipient accepted or rejected report.
  • Send SMS To Group Sends a message to every contact in one or more groups, with the same formatting and scheduling options plus a compact response mode that returns a recipient count rather than the full accepted list. The practical choice for large groups, and it is rejected outright when the balance cannot cover it.
  • Send Simple SMS Sends a single message through the simple send route, which takes its arguments as path segments and supports no formatting, scheduling, or reference options. It puts the API key in the request URL, where servers, proxies, and browsers can log it, so prefer Send SMS unless a client genuinely cannot issue a JSON post.
  • Delete Scheduled SMS Removes messages still scheduled for the future, matched by batch identifier or by your own user reference. Already dispatched messages cannot be deleted, which is why scheduling with a reference is what makes a campaign recallable.

Reporting

1
  • List SMS Log Retrieves the SMS log, filterable by recipient, date range, user reference, batch identifier, and scheduled only. Each entry carries send time, delivery status, sender, body, credit cost, and batch identifier. It reaches back three months and returns at most a thousand entries per call, so page with the offset.

Contacts

8
  • Create Contact Adds a contact, optionally into a group and with custom data fields. Up to twelve data fields per contact are supported.
  • Update Contact Changes a contact's name, phone number, data fields, or deactivated state, addressed by contact identifier or by current phone number. The deactivated state is the non destructive way to stop messaging someone while keeping their record.
  • Delete Contact Deletes one contact by identifier or phone number. Permanent, and it takes the data fields with it.
  • Delete Multiple Contacts Deletes a batch by identifier list or phone number list and returns the number deleted. A count is all you get back, so establish the set before running it rather than after.
  • List Contacts Pages through the address book, optionally filtered to active or deactivated contacts only.
  • List Contacts In Group Pages through a single group's members, including the date each contact joined. The read that makes a group cleanup reviewable before it is destructive.
  • Get Contact By ID Returns the full contact record including data fields and group memberships. Group memberships are the field that determines whether a contact would be orphaned by a cleanup.
  • Get Contact By Phone Number Returns the same record addressed by phone number, which is usually what an upstream system holds.

Groups

9
  • List Groups Returns all contact groups with creation date and member count. The inventory a segment reconciliation starts from.
  • Create Group Creates an empty group and returns its identifier.
  • Update Group Renames a group. Flows referencing the group by identifier are unaffected.
  • Delete Group Deletes a group. Only empty groups can be deleted, so a vacate has to happen first, which is what makes the vacate the operation worth watching rather than this one.
  • Add Contact To Group Adds a number to a group, creating the contact if it does not exist. The response code distinguishes created from updated, so a flow knows which happened without a separate lookup.
  • Remove Contact From Group Removes one contact from a group while retaining the contact itself. The correct non destructive operation for an ordinary membership change.
  • Remove Multiple Contacts From Group Removes a batch from a group by identifier list or phone number list, again retaining the contacts.
  • Vacate Group Empties a group, optionally deleting the contacts that end up belonging to no group at all. That option deletes people from the entire address book, not just from this group, and it returns a count rather than a list.
  • Move Contacts Between Groups Moves contacts by phone number from one group to another, returning moved and failed lists so a partial result stays visible instead of being reported as success.

Account

2
  • Get Credit Balance Returns the remaining account credit. Worth calling before a large group send, which is rejected outright when the balance cannot cover it.
  • List Sender Names Returns the approved sender names on the account with the default flagged. Sender names are created and validated only through the web interface, so this read is the only way a flow learns what it is allowed to send as.

Frequently Asked Questions

What can FlowRunner do with ProSMS?

FlowRunner agents can run Send SMS, Send SMS To Group, and Send Simple SMS in ProSMS, plus 21 more actions.

Does connecting ProSMS to FlowRunner require OAuth?

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

Can ProSMS trigger a FlowRunner workflow automatically?

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

Start building with ProSMS

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