Quickstart
Send your first SMS or verify a user in under five minutes.
Getting started
TextCall is the enterprise communications platform of Intergo Telecom, combining messaging, verification, phone numbers, and voice in one platform.
Multiple API keys, one per application. Product-specific webhooks, built on a common structure. No vendor sprawl, no fragmented integrations just a unified platform that scales with your communication stack.
What you can build
| Product | What it does | Interface | Status |
|---|---|---|---|
| Messaging | Outbound SMS to one or many recipients, with delivery tracking | HTTP API | Available |
| Verify | Send and validate one-time passcodes with automatic channel fallback | HTTP API | Available |
| 2-way Messages | Receive inbound SMS and WhatsApp messages and reply by your own numbers | HTTP API | ETA Q3 - 2026 |
| Numbers (DID) | Rent local, mobile and toll-free numbers in 100+ countries | Portal, API | ETA Q3 - 2026 |
| Click to Call | Bridge two parties in a call from a single API request | HTTP API | ETA Q3 - 2026 |
| SIP Trunks | Terminate and originate voice traffic over SIP | Portal, SIP | ETA Q3 - 2026 |
Verify currently supports SMS, WhatsApp, Viber, Telegram, and Voice. Messaging is SMS today, with more channels to follow.
Looking for endpoint details?This page gets you to a first successful API call and explains the platform model. For every parameter, schema and response, see the API Reference.
How the platform fits together
Four concepts. Get these straight and everything else follows.
| Concept | Scope | What it is |
|---|---|---|
| Account | One per customer | Your commercial relationship: balance, pricing, invoices, registered sender IDs, and number rentals. |
| Application | Many per account | A logical workspace. Each has its own API key, webhook endpoints, users, product configuration, and reporting. |
| Number | Assigned to one app | A DID you rent from us. Carries capabilities (voice, SMS, or both) and routing rules. Inbound traffic arrives at its application's webhook. |
| API key | One per application | The credential on every request. It identifies which application the traffic belongs to. |
An application is the unit that matters day to day. It's where a key, a set of numbers, and a webhook endpoint come together — so a message sent with a given key, and an inbound reply to a number in that same application, land in the same place with the same configuration.
When your account is created, a default application comes with it. You can start sending immediately.
Create additional applications when you want to separate traffic:
- One per product or brand, so reporting and delivery statistics stay clean
- One per environment, so staging traffic never mixes with production
- One per internal team, so each team gets its own key, its own numbers, and its own webhook endpoint
Because every API key belongs to exactly one application, the key you use determines which settings apply and where usage is reported. Rotating or revoking one application's key doesn't affect the others.
Two interfaces, one account
Most of TextCall is an HTTP API. Voice trunking is not. A SIP trunk is configured in the portal and used over SIP signalling, with its own credentials and IP allowlist.
The two surfaces share the same account, the same numbers, and the same billing. A DID you rent can send and receive SMS through the HTTP API while routing its inbound calls to your SIP trunk. You don't manage numbers twice.
Before you start
1. Get an account
TextCall accounts are provisioned by our team — there's no self-service signup. Email [email protected] with:
- Your company details
- The countries you plan to send to or receive traffic from
- Your expected monthly volumes
- Which products you're interested in
We'll set up your account and send you portal credentials, typically within one business day.
2. Get an API key
In the portal, go to Applications → Manage → API keys and copy the key for the application you want to use.
Treat your API key like a password. Never embed it in mobile apps, browser JavaScript, or public repositories — anyone holding it can send traffic and place calls on your account. Keep it server-side, and rotate it from the portal if it's ever exposed.
3. Note the base URL and authentication
All HTTP requests go to:
https://api.textcall.comAuthenticate by sending your key in the X-API-KEY header on every request. All request and response bodies are JSON, so send Content-Type: application/json on any request with a body.
curl https://api.textcall.com/messages \
-H "X-API-KEY: $TEXTCALL_API_KEY"Send your first message
This sends a single SMS and returns immediately with a message ID. Delivery happens asynchronously.
curl -X POST https://api.textcall.com/messages \
-H "X-API-KEY: $TEXTCALL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": ["+35799000000"],
"channels": [
{
"channel": "SMS",
"sender": "TextCall",
"content": { "text": "Your TextCall integration is live."}
}
]
}'{
"request_id": "01J8Z3K9QW4T7VXR2MB6C0YHN5",
"status": "SUCCESS",
"messages": [
{
"message_id": "bbfe03d8-04be-4360-9092-b409873bd1f4",
"recipient": "+35799000000",
"status": "QUEUED"
}
]
}A 200 Accepted means TextCall has accepted your message, not that the handset received it. Two identifiers are returned, and the difference matters:
request_id: one per API call. Use it to look up everything that call produced, and quote it when you contact support.message_id: one per recipient per channel attempt. This is the identifier that appears in delivery webhooks.
Choosing a
sendervalue. You have two options, and the choice determines whether you can receive replies.An alphanumeric sender ID (
TextCall) is one-way only: recipients can't reply to it. It must be registered on your account first, and some countries prohibit them or require pre-registration with the local regulator.A number you rent from us is two-way capable. Use one if you want replies, and see Sender IDs for country rules.
Sending from an unregistered sender is the most common reason a first message fails.
Send your first verification
Verify is a two-call flow: start a verification, then check the code your user entered. You don't generate, store, or expire the code — TextCall does.
Step 1: Create the verification
curl -X POST https://api.textcall.com/verifications \
-H "X-API-KEY: $TEXTCALL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient": "+35799000000",
"template": {
"name": "withdrawal_otp_en",
"variables": { "amount": "$18.22" }
},
"channels": [
{ "channel_name": "WHATSAPP", "priority": 1 },
{ "channel_name": "SMS", "priority": 2 }
]
}'TextCall tries priority 1 first. If delivery fails or times out, it automatically cascades to priority 2, then 3, and so on. You write no fallback logic.
{
"request_id": "8f14e45f-ceea-467a-9f5a-3d2b1c8e7a91",
"error_code": "",
"error_message": ""
}Step 2: Confirm the code the user typed
curl -X POST https://api.textcall.com/verifications/confirmation/{verification_id} \
-H "X-API-KEY: $TEXTCALL_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "otp_code": "482913" }'{
"success": false,
"message": "Verification code is not valid."
}A wrong or expired code returns 400 with an error code you can branch on — verify.invalid_code, verify.expired, or verify.max_attempts_reached. See Errors & status codes.
Bringing your own code
If you already generate OTPs, pass yours in custom_otp on creation. TextCall delivers it exactly as supplied, and you validate it yourself — the Confirm endpoint is not used in this flow.
Where to go next
| If you want to… | Go to |
|---|---|
| See every endpoint, parameter, and schema | API Reference |
| Setup webhooks | Webhooks |
| Understand a failure or delivery status | Errors & status codes |
Updated about 1 month ago
