Webhooks

Every platform event.
Delivered in real time.

CarrierPilot fires a webhook for every significant event — balance alerts, DID assignments, fraud detections, payments, and more. Build any automation on top of your telecom platform.

— Event Catalogue

Every event, documented.

balance.low

Fires when a customer's prepaid balance drops below the configured threshold.

Payload
{
  "customer_id": "cust_4821",
  "balance": 10.5,
  "threshold": 20,
  "currency": "USD"
}
did.assigned

Fires when a DID is provisioned to a customer account.

Payload
{
  "did": "+12125550100",
  "customer_id": "cust_4821",
  "country": "US",
  "type": "local"
}
customer.created

Fires when a new customer account is created in the platform.

Payload
{
  "customer_id": "cust_4822",
  "name": "Acme Corp",
  "plan": "growth",
  "created_at": "2026-06-14T00:00:00Z"
}
payment.received

Fires when a payment is successfully processed for an account.

Payload
{
  "customer_id": "cust_4821",
  "amount": 299,
  "currency": "USD",
  "method": "dodo_payments"
}
fraud.alert

Fires when the fraud engine detects a suspicious call pattern on an account.

Payload
{
  "customer_id": "cust_4821",
  "type": "IRSF",
  "destination": "+9001234567",
  "severity": "high"
}
invoice.generated

Fires when a monthly invoice is generated at billing cycle end.

Payload
{
  "invoice_id": "inv_7291",
  "customer_id": "cust_4821",
  "total": 4820,
  "due_date": "2026-07-01"
}
— Integration

Set up in 3 steps

01

Add an endpoint

Register your HTTPS endpoint URL in the CarrierPilot dashboard. We'll send a test ping to verify.

02

Select events

Choose which event types to subscribe to. You can add multiple endpoints with different event filters.

03

Receive events

We deliver signed JSON payloads over HTTPS with automatic retries on failure and delivery logs.

Webhook verification — Node.js
import crypto from 'crypto';

export function verifyWebhook(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(`sha256=${expected}`)
  );
}

// Express handler example
app.post('/webhooks/carrierpilot', (req, res) => {
  const isValid = verifyWebhook(
    req.rawBody,
    req.headers['x-cp-signature'],
    process.env.WEBHOOK_SECRET
  );

  if (!isValid) return res.status(401).end();

  const { event, data } = req.body;

  if (event === 'fraud.alert') {
    // Send to Slack, block account, etc.
  }

  res.status(200).end();
});
— Use Cases

What operators build with webhooks

Auto top-up balance

When balance.low fires, trigger a top-up request via your payment provider and credit the account — zero manual intervention.

Slack fraud alerts

Route fraud.alert events straight to your #ops Slack channel so your team is notified the instant anomalies are detected.

CRM customer sync

Mirror every customer.created event to your CRM to keep your sales and support teams in sync automatically.

ERP invoice export

Forward invoice.generated events to your accounting system for automatic invoice reconciliation.

Custom provisioning flows

Trigger complex provisioning workflows on did.assigned events — configure downstream systems in your stack automatically.

Revenue tracking

Stream payment.received events to your analytics pipeline to track MRR, churn, and LTV in real time.

Build on top of your telecom platform

Webhooks are available on Growth plans and above.