Build on the Tech Pad API.
Send WhatsApp template messages from your own systems, receive delivery events by webhook and monitor every request in the logs.
Skip the code — install a connector plugin.
The same WhatsApp Business API, wrapped in free connector plugins for the tools you already use — every form, booking, event and store platform sends straight to your WhatsApp. Install, connect with your email, done.
Quick start
From zero to a delivered WhatsApp message in four steps. Everything here also works inside the app’s Developers → Overview page, which tracks your progress.
Create an API key
Open Developers → API keys in the app and create a key (prefix ttp_live_). The full secret is shown once — copy it immediately.
Pick an approved template
Your workspace needs at least one Meta-approved template (see Templates). Templates refresh directly from Meta.
Send a test request
Use the in-app API tester or the request below. The recipient must have opted in to receive template messages from your number.
Add a delivery webhook
Point a webhook at your HTTPS endpoint, select the events you care about, and watch Webhook logs confirm delivery.
Authentication
The API is authenticated with per-workspace API keys sent as a bearer token. Keys are created and revoked from Developers → API keys.
- Keys start with
ttp_live_and are scoped to one workspace. - Create a separate key per integration — each key tracks its own
last usedtimestamp. - The full secret is displayed only once at creation; it cannot be recovered later. Revoke and recreate instead.
- Send the key in the
Authorizationheader:Authorization: Bearer ttp_live_…
Send a message
Sends an approved WhatsApp template message to one opted-in recipient from a connected number in your workspace.
https://v1.thetechpad.com/functions/v1/api-send
Header: Authorization: Bearer ttp_live_… · Content-Type: application/json
Request body
| Field | Type | Description |
|---|---|---|
phoneNumberId | string | ID of a connected WhatsApp number in your workspace (WhatsApp numbers page). |
to | string | Recipient phone number in E.164 format, e.g. 15551234567. |
template.name | string | Name of a Meta-approved template in your workspace, e.g. order_update. |
template.language | string | Template language code, e.g. en. |
template.parameters | array<string> | Positional values for the template’s variables, in order. |
Example request
curl -X POST 'https://v1.thetechpad.com/functions/v1/api-send' \ -H 'Authorization: Bearer ttp_live_...' \ -H 'Content-Type: application/json' \ -d '{ "phoneNumberId": "1122334455", "to": "15551234567", "template": { "name": "order_update", "language": "en", "parameters": ["Ava", "#4031"] } }'
// JavaScript
const response = await fetch('https://v1.thetechpad.com/functions/v1/api-send', {
method: 'POST',
headers: { Authorization: 'Bearer ttp_live_...', 'Content-Type': 'application/json' },
body: JSON.stringify({
phoneNumberId: '1122334455',
to: '15551234567',
template: { name: 'order_update', language: 'en', parameters: ['Ava', '#4031'] }
})
});
Webhooks
Outbound webhooks push message lifecycle events to your HTTPS endpoint in near real time. Manage endpoints from Developers → Webhooks — add, edit, pause, test and delete.
Events
| Event | Fires when |
|---|---|
message.sent | A message was accepted and sent by the WhatsApp platform. |
message.delivered | The message was delivered to the recipient’s device. |
message.read | The recipient read the message. |
message.failed | The message failed (undeliverable, template rejected, sender limit, …). |
message.received | An inbound message arrived from a customer. |
- Endpoints must be HTTPS and reachable from the internet.
- Each endpoint subscribes to a chosen subset of events; every event fires with a JSON payload containing the message id and status.
- Use Test on an endpoint to send a sample delivery and verify your handler.
- Paused endpoints keep their configuration but stop receiving events.
Rate limits
Messages are sent at up to your plan’s package rate. Actual throughput can be lower when Meta applies messaging-tier, phone-quality or account-level limits. Messages remain queued safely rather than being discarded.
| Plan | API calls / month | Base sending rate |
|---|---|---|
| Campaign Starter | — | Up to 6 messages / minute |
| Launch | 10,000 | Package rate |
| Grow | 200,000 | Package rate |
| Scale | 2,000,000 | Package rate |
Every request counts toward your API-call quota and is recorded in the API logs with its status code and duration.
Logs & monitoring
Developers → Logs keeps two views:
- API logs — every API request: method, endpoint, HTTP status, template used and duration.
- Webhook logs — every webhook delivery attempt and its outcome.
Use them to debug failed sends, confirm webhook delivery and audit integrations end to end.
Errors
Successful requests return a 2xx status. Failures return a non-2xx status with a JSON body describing the problem:
{
"error": "Template not approved",
"hint": "Check the template status in Templates — only APPROVED templates can be sent."
}
| Status | Meaning |
|---|---|
2xx | Request accepted / processed. |
400 | Malformed request — missing or invalid fields. |
401 | Missing or invalid API key. |
403 | Key valid but not permitted for this action or workspace. |
404 | Unknown number, template or resource. |
429 | Rate limit or quota exceeded — retry after backoff. |
5xx | Platform error — retry; check API logs and status page. |
Try the API from the console.
The in-app API tester generates curl, JavaScript and PHP for every request.