canonical: https://jentic.com/apis/apideck.com/sms

# Apideck SMS API

The Apideck SMS API is a focused unified interface for sending and managing SMS messages across providers including Twilio, MessageBird, Vonage, and Plivo. Five endpoints cover the full message lifecycle - list, create, get, update, and delete - so a SaaS product can hand SMS sending to whichever provider the customer has connected without writing per-vendor code. Authentication uses the standard Apideck Authorization header alongside x-apideck-app-id and x-apideck-consumer-id. Designed for transactional messaging, OTPs, and notifications rather than for bulk marketing campaigns.

## For AI agents

Send, list, retrieve, update, and delete SMS messages across Twilio, MessageBird, Vonage, and Plivo through one unified API.

## Scope

Does not handle voice calls, MMS, WhatsApp messaging, or inbound webhook delivery - use for outbound SMS message lifecycle operations only.

## Capabilities

- Send an SMS to a phone number with body and optional sender ID via POST /sms/messages
- List sent and received messages with cursor pagination through GET /sms/messages
- Look up the delivery status of a specific message by ID
- Update a queued message's body or scheduled-send time before it is dispatched
- Delete or cancel a queued message that has not yet been sent
- Switch between Twilio, MessageBird, Vonage, or Plivo without changing client code

## Use cases

### Cross-Provider Transactional SMS

Send transactional SMS - verification codes, order confirmations, appointment reminders - through whichever provider the customer has connected (Twilio, MessageBird, Vonage, Plivo) without writing per-vendor code. POST /sms/messages takes a phone number and body and returns the resulting message ID; GET /sms/messages/{id} reports delivery status. Useful for SaaS products that want to delegate provider choice to their customers.

Example prompt: Send an SMS to '+15551234567' with body 'Your verification code is 482910' and return the message_id and initial status

### OTP and Verification Flows

Build a one-time-password flow on top of the Apideck SMS API. POST /sms/messages with the OTP body, then poll GET /sms/messages/{id} or rely on the customer's connected provider's webhook to confirm delivery. The same code path works whether the customer's connection is Twilio, MessageBird, Vonage, or Plivo.

Example prompt: Generate a 6-digit code, POST /sms/messages with body 'Your code: <code>' to the user's phone, and return both the code and the message_id

### Scheduled Reminder Cancellation

Manage queued SMS reminders. POST /sms/messages with a scheduled-send time creates a queued message; PATCH /sms/messages/{id} updates the body or time; DELETE /sms/messages/{id} cancels it before dispatch. Useful for appointment-booking products where the customer might reschedule and the reminder needs to update or be cancelled.

Example prompt: List queued messages for phone '+15551234567', and for each one with a scheduled_send_time before tomorrow PATCH the time to one hour later

### AI Agent SMS Notification via Jentic

An AI agent fires off an SMS as part of a workflow - for example, alerting a customer that an order has shipped. Through Jentic, the agent searches 'send an sms', loads the POST /sms/messages operation, and executes it with the recipient and body. Jentic stores the Apideck Authorization, x-apideck-app-id, and x-apideck-consumer-id headers separately so the agent never holds raw credentials.

Example prompt: Through Jentic, search 'send an sms', load POST /sms/messages, and send a shipping confirmation SMS with the tracking link to the customer's phone number

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /sms/messages | List SMS messages |
| POST | /sms/messages | Send an SMS message |
| GET | /sms/messages/{id} | Get an SMS message by ID |
| PATCH | /sms/messages/{id} | Update a queued SMS message |
| DELETE | /sms/messages/{id} | Delete or cancel a queued SMS message |

## Key resources

- **Messages** — List, create, get, update, and delete SMS messages across the connected provider

## Why Jentic

- **Setup:** Wiring the Apideck SMS API by hand means setting up its API key plus consumer and service headers, learning the unified message shape, and normalising across SMS providers yourself. Through Jentic you install once, import Apideck SMS from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** The Apideck SMS API puts the message id in the URL path (/sms/messages/{id}), so a rule can pin your agent to one message: it can read and update that message and nothing else. You choose the operations it may call, so delete is not included unless you add it.
- **Credential handling:** Your Apideck API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'send an outbound SMS' or 'check a message's status', and Jentic returns the matching Apideck SMS operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Twilio API** — Twilio direct API with deeper messaging features (Messaging Services, scheduled flows, MMS, WhatsApp) the unified SMS API does not surface.
- **MessageBird API** — MessageBird direct API with deeper conversation and chat-channel features.
- **Apideck Vault API** — Vault sets up and stores the SMS provider connection the SMS API executes against.

## FAQ

### What authentication does the Apideck SMS API use?

An apiKey scheme on the `Authorization` header with your Apideck application key. Through Jentic this value plus `x-apideck-app-id` and `x-apideck-consumer-id` are stored encrypted in the vault and injected at execution; the agent only ever holds a scoped token.

### Can I send an SMS through Twilio, MessageBird, and Vonage with the same call?

Yes. POST /sms/messages takes a normalised payload - to, from, body, scheduled_send_time - that Apideck routes to whichever provider the customer's connection points at. The provider-specific message ID is returned as the response so subsequent GET /sms/messages/{id} calls work the same way across all providers.

### What are the rate limits for the Apideck SMS API?

The OpenAPI spec does not publish per-endpoint rate limits. Apideck applies plan-based limits at unify.apideck.com plus the underlying provider's per-account messaging limits (Twilio's MPS limits, MessageBird's throughput tiers, etc.). See https://developers.apideck.com for your plan's gateway quota.

### How do I send an SMS through Jentic?

Install with `pip install jentic`, then run the search query 'send an sms'. Jentic returns POST /sms/messages - load its schema, supply to, from (or sender_id), and body, then execute. The message lands on whichever provider the consumer has connected.

### Can I cancel an SMS after it has been queued?

Yes - DELETE /sms/messages/{id} cancels a queued message before it is dispatched, and PATCH /sms/messages/{id} can update the body or scheduled-send time. Once a message has been handed to the underlying provider for delivery, cancellation is no longer possible - the provider's webhook will report the final status.

### Does the SMS API support inbound messages?

GET /sms/messages can list inbound messages stored at the provider, but inbound delivery itself happens via the provider's webhook to your application - Apideck does not relay the inbound webhook through this API. Configure inbound handling at the underlying provider (Twilio, MessageBird, etc.).

### Can I limit what my agent is allowed to do with the Apideck SMS API?

Yes. Because you run Jentic One yourself, your own rules decide which of the SMS operations and which credentials the agent may use. You pick the exact endpoints it can call, so you can let it send with POST /sms/messages and check status with GET /sms/messages/{id} while leaving DELETE /sms/messages/{id} out unless you explicitly add it. Since the message id sits in the URL path, a rule can even pin the agent to a single message so it reads and updates that one message and nothing else.
