Skip to content

Get a notification ​

GET/api/v2/workspaces/{slug}/notifications/{pk}/

Retrieve one of your notifications by id. A notification addressed to another user, or from another workspace, returns 404, the same as an id that doesn't exist.

An archived notification also returns 404 unless you add ?archived=true. This endpoint applies the same archived default as List notifications.

Path parameters ​

slug:requiredstring

The workspace slug. It appears in your Plane URLs. In https://app.plane.so/my-team/projects/, the slug is my-team.

pk:requiredstring (uuid)

The id of the notification.

Query parameters ​

archived:optionalboolean

Set to true to retrieve an archived notification. Without it, an archived notification returns 404.

Response shaping ​

fields:optionalstring

Comma-separated list of fields to return. Fields you don't request are left out of the response instead of coming back as null, so a missing key means you didn't ask for it and null means the value is null. id is always included, whether or not you name it.

Pass all to get every requestable field. An unknown field name returns 400 with the list of valid names and the closest match, so a typo is caught instead of being silently ignored.

Requestable here: archived_at, created_at, data, entity_id, entity_name, id, is_mention, message, message_html, project_id, read_at, sender, snoozed_till, title, triggered_by_id, updated_at.

See Sparse fields.

expand:optionalstring

Comma-separated relations to embed alongside the ids: triggered_by (the user whose action produced the notification, with id, display_name, avatar_url, and email).

Expanded objects get their own key: ?expand=triggered_by keeps triggered_by_id and adds a triggered_by object next to it. An unknown value returns 400. See Expanding relations.

Scopes ​

notifications:read

Errors ​

StatusCodeCause
401unauthorizedMissing or invalid credentials.
403forbiddenYou aren't a member of the workspace, or your token scope doesn't allow this.
404not_foundNo such notification in your inbox in this workspace, or it's archived and you didn't pass ?archived=true.
406not_acceptableThe Accept header asks for a representation the API can't produce.
429rate_limitedThrottled. Honor the Retry-After header before retrying.
Get a notification
bash
curl -X GET \
  "https://api.plane.so/api/v2/workspaces/my-team/notifications/71f4c2a9-8e3b-4d56-a017-5c9e2b8d4f63/?expand=triggered_by" \
  -H "X-Api-Key: $PLANE_API_KEY"
Response200
json
{
  "id": "71f4c2a9-8e3b-4d56-a017-5c9e2b8d4f63",
  "entity_id": "8c3d1f72-4a9e-4b65-9d20-6e1f3b7a5c48",
  "entity_name": "issue",
  "project_id": "4af68566-94a4-4eb3-94aa-50dc9427067b",
  "title": "Priya Shah has mentioned you in a comment in issue Fix login redirect loop",
  "message": null,
  "message_html": "<p></p>",
  "sender": "in_app:issue_activities:mentioned",
  "is_mention": true,
  "read_at": null,
  "archived_at": null,
  "snoozed_till": null,
  "data": {
    "issue": {
      "id": "8c3d1f72-4a9e-4b65-9d20-6e1f3b7a5c48",
      "name": "Fix login redirect loop",
      "identifier": "ENG",
      "sequence_id": 142,
      "state_name": "In Progress",
      "state_group": "started",
      "type_id": "5b7e2d94-1a6c-4f38-9e02-8d4c3b6a1f57"
    },
    "issue_activity": {
      "id": "3f8b6d21-9c4e-4a73-b1d5-7e2a0c9f6b48",
      "verb": "created",
      "field": "comment",
      "actor": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
      "new_value": "@Ravi can you check the redirect on Safari?",
      "old_value": "None",
      "old_identifier": null,
      "new_identifier": null,
      "issue_comment": "@Ravi can you check the redirect on Safari?"
    }
  },
  "triggered_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
  "created_at": "2026-01-14T09:22:41.478363Z",
  "updated_at": "2026-01-14T09:22:41.478363Z",
  "triggered_by": {
    "id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
    "display_name": "Priya Shah",
    "avatar_url": "https://media.plane.so/avatars/16c61a3a-512a-48ac-b0be-b6b46fe6f430.png",
    "email": "priya@example.com"
  }
}
Response404
json
{
  "type": "not_found",
  "code": "not_found",
  "detail": "The requested resource was not found."
}