cURL
curl https://api.bodhveda.com/notifications/42069 \
-H "Authorization: Bearer bv_xxxxxxxxx"import { Bodhveda } from "@bodhveda/js";
const bodhveda = new Bodhveda("bv_xxxxxxxxx");
const notification = await bodhveda.notifications.get(42069);
// notification.status -> "delivered" | "muted" | "quota_exceeded" | ...
// notification.email?.status -> "sent" | "delivered" | "bounced" | ...import (
"context"
bodhveda "github.com/MudgalLabs/bodhveda/sdk/go"
)
ctx := context.Background()
client := bodhveda.NewClient("bv_xxxxxxxxx", nil)
notification, _ := client.Notifications.Get(ctx, 42069)
// notification.Status -> "delivered" | "muted" | ...
// notification.Email -> nil unless the send included an email block{
"data": {
"id": 42069,
"recipient_id": "recipient_123",
"payload": {
"title": "Elon, Zuck and others commented on your post."
},
"broadcast_id": null,
"target": {
"channel": "posts",
"topic": "post_id_123",
"event": "new_comment"
},
"read": false,
"opened": false,
"status": "delivered",
"completed_at": "2025-11-07T05:31:57Z",
"created_at": "2025-11-07T05:31:56Z",
"updated_at": "2025-11-07T05:31:57Z"
}
}Notifications
Retrieve notification
Retrieve a single notification by its id.
Sending is asynchronous: the send endpoint accepts the notification and returns its id with status: "enqueued", then a worker resolves in-app delivery and — when the send included an email block — the email. Poll this endpoint to read the resolved in-app status and the email delivery outcome on email (whether it was sent, delivered, bounced, …).
GET
/
notifications
/
{notification_id}
cURL
curl https://api.bodhveda.com/notifications/42069 \
-H "Authorization: Bearer bv_xxxxxxxxx"import { Bodhveda } from "@bodhveda/js";
const bodhveda = new Bodhveda("bv_xxxxxxxxx");
const notification = await bodhveda.notifications.get(42069);
// notification.status -> "delivered" | "muted" | "quota_exceeded" | ...
// notification.email?.status -> "sent" | "delivered" | "bounced" | ...import (
"context"
bodhveda "github.com/MudgalLabs/bodhveda/sdk/go"
)
ctx := context.Background()
client := bodhveda.NewClient("bv_xxxxxxxxx", nil)
notification, _ := client.Notifications.Get(ctx, 42069)
// notification.Status -> "delivered" | "muted" | ...
// notification.Email -> nil unless the send included an email block{
"data": {
"id": 42069,
"recipient_id": "recipient_123",
"payload": {
"title": "Elon, Zuck and others commented on your post."
},
"broadcast_id": null,
"target": {
"channel": "posts",
"topic": "post_id_123",
"event": "new_comment"
},
"read": false,
"opened": false,
"status": "delivered",
"completed_at": "2025-11-07T05:31:57Z",
"created_at": "2025-11-07T05:31:56Z",
"updated_at": "2025-11-07T05:31:57Z"
}
}Retrieve a single notification by the
id returned from send a notification.
Because sending is asynchronous, this is how you learn what actually happened to a send:
status— the in-app outcome.enqueuedright after the send, thendelivered,muted(preferences disallow),quota_exceeded, orfailed.email— the email outcome, present only when the send included anemailblock. It has its own lifecycle:pending→sent(provider accepted) →delivered/bounced/complained(from provider webhooks), orfailed/muted/no_contact.
Poll this endpoint after a send to confirm email delivery.
email.delivered_at is set once the provider confirms delivery; email.bounced_at / email.complained_at flag problems.Authorizations
Bearer authentication header of the form Bearer bv_xxxxxxxxx, where bv_xxxxxxxxx is your API Key with Full access scope.
Path Parameters
The unique identifier of the notification (the id returned by the send endpoint).
Response
Notification found