> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bodhveda.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Retrieve notification

> Retrieve a single notification by its id.

Sending is **asynchronous**: the [send endpoint](/api-reference/endpoint/notifications/send-notification) 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`, …).

Retrieve a single notification by the `id` returned from [send a notification](/api-reference/endpoint/notifications/send-notification).

Because sending is **asynchronous**, this is how you learn what actually happened to a send:

* `status` — the **in-app** outcome. `enqueued` right after the send, then `delivered`, `muted` (preferences disallow), `quota_exceeded`, or `failed`.
* `email` — the **email** outcome, present only when the send included an `email` block. It has its own lifecycle: `pending` → `sent` (provider accepted) → `delivered` / `bounced` / `complained` (from provider webhooks), or `failed` / `muted` / `no_contact`.

<Tip>
  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.
</Tip>


## OpenAPI

````yaml GET /notifications/{notification_id}
openapi: 3.0.3
info:
  title: Bodhveda Notifications API
  version: '1.0'
  description: API for sending notifications to recipients or broadcasting to all.
servers: []
security: []
paths:
  /notifications/{notification_id}:
    get:
      tags:
        - Notifications
      summary: Retrieve a notification.
      description: >-
        Retrieve a single notification by its id.


        Sending is **asynchronous**: the [send
        endpoint](/api-reference/endpoint/notifications/send-notification)
        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`, …).
      operationId: getNotification
      parameters:
        - name: notification_id
          in: path
          required: true
          schema:
            type: integer
          description: >-
            The unique identifier of the notification (the `id` returned by the
            send endpoint).
      responses:
        '200':
          description: Notification found
          content:
            application/json:
              examples:
                In-app only:
                  summary: Direct send, in-app only (delivered)
                  value:
                    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'
                With email:
                  summary: Direct send with email (delivered)
                  value:
                    data:
                      id: 42070
                      recipient_id: recipient_123
                      payload:
                        title: Your daily digest is ready.
                      broadcast_id: null
                      target:
                        channel: digest
                        topic: none
                        event: sent
                      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'
                      email:
                        status: delivered
                        attempt: 1
                        provider: resend
                        provider_message_id: re_abc123
                        address_snapshot: john@example.com
                        sent_at: '2025-11-07T05:31:57Z'
                        delivered_at: '2025-11-07T05:32:03Z'
        '404':
          description: Notification not found
          content:
            application/json:
              examples:
                Not found:
                  summary: Notification Not Found
                  value:
                    message: notification not found
      security:
        - BearerAuthWithAPIKeyWithFullAcessScope: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl https://api.bodhveda.com/notifications/42069 \
              -H "Authorization: Bearer bv_xxxxxxxxx" 
        - lang: javascript
          label: JavaScript
          source: >-
            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" |
            ...
        - lang: go
          label: Go
          source: >-
            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
components:
  securitySchemes:
    BearerAuthWithAPIKeyWithFullAcessScope:
      type: http
      scheme: bearer
      bearerFormat: APIKey
      description: >-
        Bearer authentication header of the form `Bearer bv_xxxxxxxxx`, where
        `bv_xxxxxxxxx` is your **API Key** with `Full access` scope.

````