First-party app
seven

seven

Send SMS and voice calls, look up and validate phone numbers (HLR, MNP, CNAM), and manage contacts, groups and webhooks on seven.

stable CommunicationMarketing

About

seven ships in the w6w first-party pack. It declares 31 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.seven
Version
0.1.0
Author
w6w
Licence
MIT
Categories
Communication · Marketing

Overview

seven (seven.io, formerly sms77) is a messaging gateway for SMS, voice and phone-number intelligence. This app covers the HTTP gateway a workflow actually drives: sending an SMS to numbers, contacts or groups now or at a scheduled time (with sender, label, TTL, flash and performance-tracking options), deleting a scheduled SMS before it goes out, placing text-to-speech voice calls (plain text or SSML) and hanging an active call up.

The lookup endpoints answer what a number is before you message it: format and carrier, HLR (is it valid and reachable, is it ported or roaming), MNP (the current network), CNAM (caller-ID name) and RCS capabilities.

Around the send it reads the account: balance, per-country pricing, usage analytics, and the outbound, inbound and voice logbooks (the way to read delivery status, since the old status endpoint is deprecated). It manages the audience, contacts and groups, subscribes webhooks for inbound SMS, delivery reports, voice events and click tracking, and lists the phone numbers available to book and the ones the account already holds.

seven answers every request with HTTP 200 and signals errors in the body as a numeric code, so this app reads those codes (900 bad key, 902 missing scope, 500 no credit, 202 invalid number, …) rather than the status. Health checks report seven’s own status feed, an unauthenticated reachability probe of the API, and the account’s remaining balance alongside the credential check derived from the connection.

Build with seven

Three routes to the same 31 actions. The Workflow tab is generated from seven's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Get Usage Statistics

analytics-get

Read SMS, RCS, voice, HLR, MNP and inbound counts and spend, grouped by date, label, subaccount or country.

Get Balance

balance-get

Read the account's current prepaid balance and its currency.

Create Contact

contact-create

Create a contact. Group membership is not set here; the vendor's `groups` array replaces the whole membership list and is not covered.

Delete Contact

contact-delete

Delete a contact from the contact list.

Get Contact

contact-get

Retrieve one contact by id, with its properties and group memberships.

List Contacts

contact-list

List contacts, optionally filtered by a search term or group, with paging.

Update Contact

contact-update

Change one or more properties of a contact. Unset fields are left as they are.

Create Group

group-create

Create a contact group.

Delete Group

group-delete

Delete a contact group. With delete_contacts on, the contacts in it are deleted too.

Get Group

group-get

Retrieve one contact group by id.

List Groups

group-list

List contact groups with paging.

Rename Group

group-update

Change a contact group's name.

List Received SMS

journal-inbound

Read the inbound logbook: SMS received on the account's numbers. Up to 100 entries per call.

List Sent Messages

journal-outbound

Read the outbound logbook: sent SMS and RCS with price, delivery report (dlr) and timestamps. This is the way to read delivery status. Up to 100 entries per call.

List Voice Calls

journal-voice

Read the voice logbook: calls with duration, status and price. Up to 100 entries per call.

CNAM Lookup

lookup-cnam

Look up the caller-ID name for a number. Mostly meaningful for US/Canada (NANP); elsewhere the value is often a country or carrier name. Billed per valid number.

Format Number

lookup-format

Format a phone number and read its carrier, country and network type.

HLR Lookup

lookup-hlr

Query the HLR database for a number: is it valid, reachable, ported, roaming? Billed per lookup.

MNP Lookup

lookup-mnp

Find the current network operator of a number, including whether it was ported. Billed per lookup.

RCS Capabilities

lookup-rcs

Read which RCS features a number supports. Cache the result before sending RCS.

Get Active Number

number-active-get

Read one booked phone number's billing, features and forwarding settings.

List Active Numbers

number-active-list

List the phone numbers booked on the account, with billing, features and forwarding. A Slack forwarding URL is masked.

List Available Numbers

number-available-list

Search phone numbers that can be booked, with their fees and features.

Get SMS Pricing

pricing-get

Read the account's SMS prices per country and network. Omit the country for every country, which is a large response.

Delete Scheduled SMS

sms-delete

Delete one or more SMS by id before they have been sent, which stops them going out.

Send SMS

sms-send

Send an SMS to one or more numbers, contacts or groups, now or at a scheduled time. Code 101 (partial failure) is returned, not thrown: check each message's success flag.

Send Voice Call

voice-call

Place a text-to-speech call to one or more numbers. The text may be plain or SSML; a separate call and a `messages` entry is created per recipient.

End Voice Call

voice-hangup

End an active voice call. Only calls in the in-progress state can be ended.

Register Webhook

webhook-create

Subscribe a URL to a class of seven events (inbound SMS, delivery reports, voice, tracking).

Delete Webhook

webhook-delete

Delete a webhook by id.

List Webhooks

webhook-list

List the account's active webhooks. Custom delivery headers are replaced by a has_headers flag, since they can carry credentials.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying seven's real ids.

{
  "manifestVersion": "2",
  "name": "seven-example",
  "steps": [
    {
      "id": "contact-get",
      "uses": {
        "app": "io.w6w.seven",
        "action": "contact-get",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "id": "<id>"
      }
    }
  ]
}

Here are some of the things you can do

  • Get Contact

    read
    contact-get
  • Get Usage Statistics

    read
    analytics-get
  • Get Balance

    read
    balance-get
  • Create Contact

    perform
    contact-create
  • List Contacts

    search
    contact-list

+26 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for seven, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to seven. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "contact-get",
  payload: {
    id: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action contact-get --payload '{"id":"<value>"}'

Give an AI agent seven — without giving it seven's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.seven#contact-get",
    "input": {
      "id": "<id>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's seven connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

seven's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. seven itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

seven declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

seven platform status

Reads status.seven.io's Atom history feed for open incidents that name an API-reachable component.

dependency

API reachable

Unsigned GET https://gateway.seven.io/api/balance. The documented bare return code 900 proves the gateway is answering.

quota

Account balance

Remaining prepaid balance from GET /balance.