Create messages

Sends a message from one of this org's own numbers.

POST /v1/tel/messages

Addresshttps://api.hanzo.ai/v1/tel/messages
MethodPOST
Operationpost_tel_messages
AuthAuthorization: Bearer $HANZO_API_KEY

Sends a message from one of this org's own numbers.

from must be a number the org HOLDS, checked against the store rather than taken on trust — a caller that could send from any number could impersonate one, and the carrier would deliver it. to is required, and the body needs text or media, because a message with neither is delivered as nothing and billed as something.

Request

4 fields, body application/json (required).

FieldInTypeRequiredDescription
frombodystring—From is the number to send FROM, in E.164.
mediabodystring[]—Media are URLs to attach.
textbodystring—Text is the message body.
tobodystring—To is the number to send to, in E.164.

Response

StatusBodyMeaning
201tel.SMScreated
defaultproblem-detailsrefused

201 body — 6 fields.

FieldInTypeAlwaysDescription
frombodystring—From is the sending number in E.164, and must be one this org holds.
idbodystring—ID is the carrier's handle for the message.
orgbodystring—Org is the tenant the message was sent for or received by.
statusbodystring—Status is where the message is: "queued", "sent", "delivered" or "failed".
textbodystring—Text is the message body.
tobodystring—To is the receiving number in E.164.

Failure carries the platform error shape — see Errors.

Examples

hanzo tel messages create
import { Configuration, TelApi } from 'hanzoai';

const api = new TelApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postTelMessages({ from: "<from>", media: ["<media>"] });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import TelApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = TelApi(client).post_tel_messages(from="<from>", media=["<media>"])
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.TelAPI.PostTelMessages(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, tel_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = tel_api::post_tel_messages(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.TelApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new TelApi(client).postTelMessages();
curl -X POST https://api.hanzo.ai/v1/tel/messages \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "from": "<from>",
       "media": [
         "<media>"
       ]
     }'

MCP reaches tel through the tel tool, which names its 10 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_tel_calls"
         }
       }
     }'

Tel API · All Hanzo APIs · Interactive reference

Was this page useful?