Delivery receipts
A 202 Accepted from POST /v1/events/trigger indicates that Nerve accepted the notification and durably enqueued it onto JetStream. Delivery receipts determine what happened next.
Checking delivery status
At launch, Nerve supports two primary methods for customers to inspect delivery status:
1. Polling via API & SDK
You can query any event by its ID using the public status endpoint:
curl https://api.nervly.io/v1/events/evt_9c4f1a2b3d5e6f708192a3b4c5d6e7f8 \
-H "Authorization: Bearer $NERVE_API_KEY"
Or with the official TypeScript SDK (@nervehq/sdk):
import { Nerve } from '@nervehq/sdk';
const nerve = new Nerve({ apiKey: process.env.NERVE_API_KEY });
const receipt = await nerve.events.get('evt_9c4f1a2b3d5e6f708192a3b4c5d6e7f8');
console.log(`Status: ${receipt.status}, Provider: ${receipt.provider}, Cost: $${receipt.cost_micro_usd / 1e6}`);
2. Live stream in the dashboard
In app.nervly.io/messages, your team can search, filter, and inspect deliveries with real-time status badges (DELIVERED, FAILED, SUPPRESSED). Clicking any message opens the drawer to display the chronological delivery timeline in order.
Nerve provides immediate status polling via GET /v1/events/{eventId}. Outbound webhooks pushing delivery status events directly to your HTTP endpoints are scheduled for Month 6 (ADR-010). We intentionally deferred outbound webhooks to ensure proper signature rotation, dead-letter retry queues, and replay protection without rushing the launch.
Upstream provider delivery receipts
When downstream providers (Termii, SendGrid, Postmark, etc.) deliver an SMS or email, they send asynchronous webhooks back to Nerve:
https://api.nervly.io/v1/webhooks/{provider}
Nerve normalises each provider’s proprietary payload into a standardized receipt event:
| Field | Meaning |
|---|---|
event_id | Nerve event identifier |
message_id | Provider’s external message identifier |
recipient | Sanitized destination (phone or email) |
status | Delivery state (DELIVERED, FAILED, SEEN, CLICKED) |
channel | Channel used (sms, email, whatsapp, push) |
cost_micro_usd | Delivery cost in micro-USD ($0.000001) |
Durability and telemetry
After dispatch, the worker records delivery state and telemetry:
- It updates the message's status (
DELIVERED,FAILED,SUPPRESSED), attempt count, provider, and final channel. - It appends an immutable timeline step for each state transition, including error diagnostics.
- It aggregates daily message counts and costs per workspace, channel, and provider so analytics queries do not scan the full message history.
Every record is scoped to your workspace; none of it is visible to another tenant.