Skip to content
Developers

Notifications

Read, mark, delete and mute the notifications of the account behind an API key.

Use these endpoints to build an inbox view, show an unread badge, forward Hive3 notifications to another tool, or mute noisy sources. Notifications always belong to the key owner's own account; these routes do not accept ?account=.

Some field names still say person and community. In the API both identify accounts: a "community" is an account that other accounts join, and IDs of either kind are account IDs. API access needs a Honey Bee plan or above; see the developer overview. Errors and rate limits follow Requests, errors and limits.

Notification lists do not use cursors. They take limit, offset and unreadOnly, and return hasMore inside data instead of a page object.

Each endpoint shows curl. Endpoints with a request body or a list response also show JavaScript and Python; the others follow the same pattern with the same headers.

#Notifications

#List notifications

GET/api/v1/notificationsScopeaccount:read

Returns your notifications, newest first, without deleted ones. Non-numeric or non-positive values for limit and offset fall back to the defaults, and values above the maximum are reduced to it.

NameInTypeRequiredNotes
limitqueryintegerNoItems to return, 1 to 100. Default 20.
offsetqueryintegerNoItems to skip, 0 to 1,000. Default 0.
unreadOnlyquerybooleanNoPass true to return only unread notifications. Any other value returns all.
bash
curl "https://app.hive3.tech/api/v1/notifications?unreadOnly=true&limit=20" \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200. To read the next page, send offset plus the number of items returned while hasMore is true. total is not a full count: it is the end of the current page, plus one when more items remain. unreadCount counts up to 1,000 unread notifications. data on each notification holds the notification's own fields plus actorId, entityType and entityId; account-valued fields are named personId or communityId.

json
{
  "data": {
    "notifications": [
      {
        "id": "notification_123",
        "type": "event_rsvp",
        "title": "New RSVP",
        "message": "Grace Hopper is attending Launch Night.",
        "read": false,
        "readAt": null,
        "createdAt": "2026-10-27T09:15:00.000Z",
        "data": { "actorId": "account_789", "entityType": "event", "entityId": "event_123" }
      }
    ],
    "hasMore": false,
    "total": 1,
    "unreadCount": 1
  }
}

#Count unread notifications

GET/api/v1/notifications/unread-countScopeaccount:read

Returns how many unread notifications you have, up to 1,000.

bash
curl https://app.hive3.tech/api/v1/notifications/unread-count \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200.

json
{ "data": { "unreadCount": 3 } }

#Mark one notification read

POST/api/v1/notifications/{notificationId}/readScopeaccount:write

Marks a notification read. Marking a notification that is already read succeeds. Limited to 240 requests per minute.

NameInTypeRequiredNotes
notificationIdpathstringYesID from the notification list.
bash
curl -X POST https://app.hive3.tech/api/v1/notifications/notification_123/read \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200.

json
{ "data": { "id": "notification_123" } }
  • 404 not_found: Notification not found, for an unknown ID, a deleted notification, or one that belongs to another account.

#Mark all notifications read

POST/api/v1/notifications/mark-all-readScopeaccount:write

Marks every unread notification read, up to 5,000 per request. updated is the number of notifications changed; if it is large, call again until it reaches 0. There is no request body. Limited to 30 requests per minute.

bash
curl -X POST https://app.hive3.tech/api/v1/notifications/mark-all-read \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200.

json
{ "data": { "updated": 12 } }
  • 429 rate_limited: Too many notification updates.

#Delete a notification

DELETE/api/v1/notifications/{notificationId}Scopeaccount:write

Removes a notification from your inbox. It no longer appears in lists or in the unread count. Limited to 120 requests per minute.

bash
curl -X DELETE https://app.hive3.tech/api/v1/notifications/notification_123 \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200.

json
{ "data": { "id": "notification_123", "removed": true } }
  • 404 not_found: Notification not found.

#Mutes

A mute stops a source from notifying you. Mutes affect new notifications; notifications already in your inbox stay. Mute keys are stored in the account's mutedNotifications preference, which PATCH /api/v1/account/preferences can replace as a whole.

#List mutes

GET/api/v1/notification-mutesScopeaccount:read

Returns the account's mutes. id is the mute key, such as event:event_123. scopeId is null for system. createdAt is when the account's preferences were first saved, not when the mute was added.

bash
curl https://app.hive3.tech/api/v1/notification-mutes \
  -H "Authorization: Bearer $HIVE_API_KEY"

Returns 200. Mutes saved with the community or person scope are listed as account.

json
{
  "data": {
    "mutes": [
      {
        "id": "event:event_123",
        "scope": "event",
        "scopeId": "event_123",
        "createdAt": "2026-10-01T09:30:00.000Z"
      }
    ]
  }
}

#Mute or unmute a source

PATCH/api/v1/notification-mutesScopeaccount:write

Adds or removes one mute. Muting something that is already muted, or unmuting something that is not, succeeds. Limited to 60 requests per minute; bodies are limited to 16 KiB.

NameInTypeRequiredNotes
scopebodystringYessystem mutes all notifications. account, person and community mute notifications triggered by one account. event, course, job, content and quest mute notifications about one item. Use only these values.
mutedbodybooleanYestrue to mute, false to unmute.
scopeIdbodystringFor account scopesAccount ID or handle for account, person and community. For the other scopes (except system), the ID of the item.
bash
curl -X PATCH https://app.hive3.tech/api/v1/notification-mutes \
  -H "Authorization: Bearer $HIVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"scope":"event","scopeId":"event_123","muted":true}'

Returns 200. For account scopes the response reports scope as account and scopeId as the account's ID.

json
{ "data": { "muted": true, "scope": "event", "scopeId": "event_123" } }
  • 400 invalid_request: scope and muted are required, or scopeId is required for account mutes.
  • 404 not_found: Account not found, when scopeId matches no account.
  • 429 rate_limited: Too many notification mute updates.