canonical: https://jentic.com/apis/cm.com/cm

# CM.com Business Messaging API

Jentic publishes the only available OpenAPI specification for CM.com Business Messaging API, keeping it validated and agent-ready. The API delivers messages across SMS, RCS, WhatsApp, Viber, Apple Messages for Business, and other conversational channels through a single send endpoint that accepts a list of recipients and a channel-specific payload. It also provides number validation, HLR-based number lookup, and per-channel capability checks so callers can confirm whether a given mobile number can receive a particular message type before sending.

## For AI agents

Send SMS, RCS, WhatsApp, Viber and other channel messages, validate phone numbers, and check which messaging channels a number supports.

## Scope

Does not handle voice calls, email delivery, or in-app push notifications - use for SMS, RCS, WhatsApp, and other channel messaging plus number validation only.

## Capabilities

- Send SMS, RCS, WhatsApp, Viber and Apple Messages for Business through a single POST /message endpoint
- Check whether a phone number supports a specific channel via GET `/v1/capabilities/{phoneNumber}`
- Run bulk capability checks for thousands of numbers in one call to `/v1/capabilities`
- Validate phone number formatting and reachability with GET `/numbervalidation/{phoneNumber}`
- Perform HLR number lookups to retrieve carrier and roaming status via `/numberlookup/{phoneNumber}`

## Use cases

### Multi-Channel Customer Notifications

Send time-sensitive notifications such as order confirmations, delivery updates, and OTP codes across SMS, WhatsApp, RCS, and Viber from a single POST /message call. The API accepts a list of recipients and a channel preference, so callers can fall back from a richer channel like RCS to SMS when a number is not reachable. Integration with the unified send endpoint typically takes under a day for SMS-only flows and two to three days when adding template-based WhatsApp.

Example prompt: Send an SMS to +31612345678 with body 'Your order #4521 has shipped' using POST /message and confirm the message status.

### Phone Number Validation Before Outreach

Validate phone numbers in user signup and CRM imports before storing them, removing malformed entries and reducing failed-send costs. GET `/numbervalidation/{phoneNumber}` returns whether the number is correctly formatted and reachable, while `/numberlookup/{phoneNumber}` adds carrier, country, and roaming detail. Replacing in-house regex validation with this endpoint usually takes under half a day.

Example prompt: Call GET /numbervalidation/+447911123456 and return whether the number is valid and reachable.

### Channel Capability Routing

Decide at runtime which messaging channel to use for each recipient by querying capabilities. POST `/v1/capabilities` accepts a list of numbers and returns per-channel reachability so a marketing or transactional flow can pick RCS where supported and fall back to SMS otherwise. This pattern reduces wasted spend on rich-message attempts that silently fall back to SMS at the operator level.

Example prompt: POST a list of 100 phone numbers to `/v1/capabilities` and return which numbers support RCS.

### AI Agent Messaging Through Jentic

An AI agent uses Jentic to discover and call the CM.com send endpoint without storing the X-CM-PRODUCTTOKEN header value in its own context. The agent searches for 'send an SMS', loads the schema for POST /message, and executes with the recipient and body. Jentic injects credentials at execution time, so the same workflow works in CrewAI, LangChain, or a custom agent loop.

Example prompt: Use Jentic to search for 'send an SMS', load the POST /message schema, and send 'Welcome' to a single recipient.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/message` | Send messages on SMS, RCS, WhatsApp, Viber, and other channels |
| GET | `/v1/capabilities/{phoneNumber}` | Check channel capabilities for a single phone number |
| POST | `/v1/capabilities` | Bulk channel capability check |
| GET | `/numbervalidation/{phoneNumber}` | Validate a phone number |
| GET | `/numberlookup/{phoneNumber}` | HLR-based number lookup |

## Key resources

- **Messages** — Send messages across SMS, RCS, WhatsApp, Viber, Apple Messages for Business, and other channels via POST /message
- **Capabilities** — Check single or bulk channel capability for phone numbers
- **Number Validation** — Validate phone number format and reachability
- **Number Lookup** — Retrieve carrier, country, and roaming information via HLR lookup

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 67 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 100 / 100
  - Developer Experience & Jentic Compatibility: 63 / 100
  - AI-Readiness & Agent Experience: 49 / 100
  - Agent Usability: 94 / 100
  - Security: 50 / 100
  - AI Discoverability: 100 / 100
- **View full report:** https://jentic.com/apis/cm.com/cm/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring CM.com by hand means learning its X-CM-PRODUCTTOKEN header auth, targeting gw.messaging.cm.com/v1.0, and handling retries across its messaging channels yourself. Through Jentic you install once, import the CM.com Business Messaging API from the API Directory, store the product token once, and your agent calls it.
- **Permission scoping:** CM.com carries the recipient in the request body rather than as a resource id you own, so scope the agent to the operations it needs, such as checking number capabilities or validating a number. You choose that set, so the send-message operation is not included unless you add it.
- **Credential handling:** Your CM.com product token is stored once, encrypted, by your own Jentic One instance and injected into the X-CM-PRODUCTTOKEN header at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'send an SMS' or 'validate a phone number', and Jentic returns the matching CM.com operation with its input schema so the agent calls the right endpoint without reading the docs.

## Related APIs

- **Sinch** — Sinch offers a comparable multi-channel messaging stack covering SMS, MMS, WhatsApp and Viber.
- **Plivo** — Plivo provides SMS, voice, and WhatsApp APIs with global reach.
- **Telnyx** — Telnyx offers SMS, MMS, voice, and number provisioning over a self-owned IP network.
- **Twilio Messaging** — Twilio Messaging covers SMS, MMS, and WhatsApp with mature US carrier coverage.

## FAQ

### Why is there no official OpenAPI spec for CM.com Business Messaging API?

CM.com does not publish an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call CM.com Business Messaging API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the CM.com Business Messaging API use?

The API uses an API-key scheme called productToken, sent as the X-CM-PRODUCTTOKEN header on every request. Through Jentic the product token is stored encrypted in the vault and injected at execution time, so an agent never sees the raw key in its prompt or logs.

### Can I send WhatsApp and RCS messages through the CM.com API?

Yes. The single POST /message endpoint accepts a channel hint and supports SMS, RCS, WhatsApp, Viber, Apple Messages for Business, and other conversational channels. Check reachability first with GET `/v1/capabilities/{phoneNumber}` before attempting a richer channel.

### What are the rate limits for the CM.com Business Messaging API?

The OpenAPI spec does not declare numeric rate limits. CM.com applies tenant-specific throughput based on your account tier and channel; high-volume SMS and bulk capability checks should be paginated and throttled client-side. Confirm your account limits with CM.com support before large bulk runs.

### How do I validate a phone number with the CM.com API through Jentic?

Search Jentic for 'validate a phone number', load the GET `/numbervalidation/{phoneNumber}` schema, and execute with the E.164 number. The response indicates whether the number is correctly formatted and reachable. Install the SDK with pip install jentic and call it via the async client.

### Does the CM.com API support bulk channel capability checks?

Yes. POST `/v1/capabilities` accepts a list of phone numbers and returns per-channel reachability for each, which is the preferred path when routing thousands of recipients across SMS, RCS and WhatsApp in a single workflow.

### Can I limit what my agent is allowed to do with the CM.com Business Messaging API?

Yes. Jentic One runs self-hosted, so your own rules decide which CM.com operations the agent may call and when its product token is used. Because CM.com carries the recipient in the request body rather than as a resource you own, you scope the agent to just the operations it needs, such as GET `/numbervalidation/{phoneNumber}` or the capability checks on `/v1/capabilities`, and leave POST /message out unless you explicitly add sending. The token is injected only for the operations you permit, so an agent granted lookup and validation access cannot send a message.
