curl -X POST https://api.plixa.app/v1/messages/send \
-H "Authorization: Bearer plixa_pat_…" \
-H "Content-Type: application/json" \
-d '{
"phone": "5511999999999",
"body": "Hi Lucia! Your order shipped"
}' Developers
Build on top of Plixa in minutes.
Plixa is API-first. Generate a token in the panel, POST a message, get every inbound via signed webhooks. No SDK to install, no proprietary protocol — just JSON, REST, and HMAC.
API access is included on Professional and Business plans. Issue tokens from /api-tokens in the panel.
Send a message
POST a phone number and a body. We resolve or open the conversation, push to WhatsApp, and return the queued message.
POST https://api.plixa.app/v1/messages/send
- · Requires a token with the `write` ability.
- · Rate limit: 100 requests / minute per token.
await fetch('https://api.plixa.app/v1/messages/send', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.PLIXA_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
phone: '5511999999999',
body: 'Hi Lucia! Your order shipped',
}),
}) Receive every message
Register a webhook endpoint in the panel. Plixa POSTs every inbound (and outbound, if you want) to your URL within seconds.
Configured at https://app.plixa.app/webhooks
- · Events: message.inbound, message.outbound, conversation.created, conversation.updated, conversation.deleted.
- · Retries: exponential backoff (1m, 5m, 30m, 2h, 12h), 5 attempts total. A 410 / 4xx response stops the retry chain.
Every delivery carries an X-Plixa-Signature header. Re-hash the raw body with your endpoint secret and compare in constant time.
X-Plixa-Signature: sha256=<hmac>
import crypto from 'crypto'
app.post('/plixa-webhook', express.raw({ type: 'application/json' }), (req, res) => {
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.PLIXA_WEBHOOK_SECRET)
.update(req.body)
.digest('hex')
const provided = req.header('X-Plixa-Signature') ?? ''
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(provided))) {
return res.status(401).send('bad signature')
}
const event = JSON.parse(req.body.toString())
// event.event, event.data — handle and respond 2xx within 10s.
res.status(204).end()
}) Route::post('/plixa-webhook', function (Request $request) {
$body = $request->getContent();
$expected = 'sha256='.hash_hmac('sha256', $body, env('PLIXA_WEBHOOK_SECRET'));
if (! hash_equals($expected, (string) $request->header('X-Plixa-Signature'))) {
abort(401, 'bad signature');
}
$event = json_decode($body, true);
// $event['event'], $event['data'] — handle and respond 2xx in <10s.
return response()->noContent();
}); Full reference
Every endpoint (panel + external) is documented with the request schema, examples, and response envelopes.
Open the /v1/docs referenceGet started
Start automating WhatsApp today.
Connect your number in five minutes and let AI handle the first reply. Free for 7 days on Professional — no credit card, cancel anytime.
No credit card required.