Pombity

by Aric Software & Design

Texting for your application, with the compliance built in

  1. Sent by the application at 9:12 PM. Held by quiet hours; delivered at 8:00 AM.
  2. 8:00 AM

    Blue Sky Rentals: Your kayak is ready at dock 4. Reply STOP to opt out, HELP for help.

  3. 8:04 AM

    STOP

  4. 8:04 AM

    You have successfully been unsubscribed. You will not receive any more messages from this number. Reply START to resubscribe.

What the recipient's phone shows when an application sends through Pombity: the message names its sender and carries opt-out instructions, quiet hours hold it overnight, and a STOP works immediately, confirmed by the carrier's own reply. Blue Sky Rentals is an example; the message texts follow the service's real templates.

First sandbox send, under five minutes

Three equivalent doors to the same service: pick one. Each shows the call that produces the thread, exactly as the recipient's phone shows it.

The pombity CLI (Node 20+, zero dependencies) is on npm: npx -y pombity --help or npm install -g pombity.

export POMBITY_API_KEY=ak_test_your_key

pombity send --to +14785550123 \
  --body "Blue Sky Rentals: Your kayak \
is ready at dock 4. Reply STOP to opt \
out, HELP for help." \
  --json

Then read the delivery report:

pombity report --id <messageId> --json

Auth is the X-Api-Key header on every request.

API=https://api.pombity.com

curl -s $API/v1/messages \
  -H "X-Api-Key: ak_test_your_key" \
  -H "Content-Type: application/json" \
  -d '{"to": ["+14785550123"],
    "body": "Blue Sky Rentals: Your kayak is ready at dock 4. Reply STOP to opt out, HELP for help."}'

The response carries one message per recipient with an id. Read its delivery report:

curl -s $API/v1/messages/<id> \
  -H "X-Api-Key: ak_test_your_key"

The MCP server (Streamable HTTP) exposes eight typed tools: send_text, send_email, preview_message, check_consent, get_delivery_report, get_usage, request_verified_destination, confirm_verified_destination. Bearer token = the same API key.

{ "mcpServers": { "pombity": {
    "type": "http",
    "url": "https://mcp.pombity.com/mcp",
    "headers": {
      "Authorization":
        "Bearer ak_test_your_key" }
} } }

With Claude Code: save that as mcp.json and run claude --mcp-config mcp.json, then ask it to send the text above and read the delivery report.

Get started

On a sandbox key the message routes to an in-process simulator and comes back with a realistic Delivered receipt ("deliveryDetail": "sandbox", "sandbox": true): zero carrier traffic, every rule enforced. You can even simulate inbound texts (keyword opt-ins, YES, STOP, HELP) with POST /v1/sandbox/inbound to exercise the whole opt-in flow.

Pombity is an SMS and email API whose differentiator is the compliance layer already running server-side: a consent ledger, STOP and HELP handling, quiet hours, verified destinations, quotas, and a sandbox that enforces every rule without creating carrier traffic. You write the send; the service keeps it lawful. Formal name: Aric Communication Service.

Agents start here: llms.txt, the discovery document, SKILL.md (agent instructions), the OpenAPI document, and the MCP endpoint at https://mcp.pombity.com/mcp.

Before you start: a key in hand

Everything above assumes you hold an API key. Sandbox keys are prefixed ak_test_ and live keys ak_live_; a key is shown exactly once when minted, and only a hash is stored. Self-serve sign-up is opening during launch. Until it does, contact Aric Software & Design for a key. Start with the sandbox key: every compliance rule runs identically there, and nothing you send reaches a carrier.

The API answers at https://api.pombity.com. The discovery document always carries the current hostname.

Going live: verify a destination

On the free tier, live texts deliver only to numbers the key holder has proved ownership of with a 6-digit code. That is the anti-abuse design, not a limitation to work around.

# texts a 6-digit code to the phone
pombity verify request \
  --phone +14785550123 --json

pombity verify confirm \
  --phone +14785550123 \
  --code 123456 --json

Confirmation writes provable consent to the ledger (self-verified), and a send to your own verified number is never held by quiet hours. US and Canada numbers only; up to 3 verified destinations on a free tenant.

What the service will refuse, and why

Consent, STOP, quiet hours, quotas, velocity, and the content screen are enforced server-side; a refusal is the rule working, and every refusal carries a machine-readable code. Read the compliance layer before writing retry logic, and the API reference for every endpoint. Pricing: free during launch.