OpenAPI Specification
openapi: 3.0.3
info:
title: Bluesky Application API (app.bsky) actor notification API
description: The Bluesky application-layer Lexicon API providing feed, actor, graph, notification, and video endpoints for the microblogging application built on AT Protocol. The AppView is accessible unauthenticated at public.api.bsky.app for read operations, and at api.bsky.app for authenticated write operations. Schemas are defined using Lexicon, AT Protocol's schema definition language.
version: 1.0.0
contact:
name: Bluesky
url: https://docs.bsky.app/
license:
name: MIT / Apache-2.0
url: https://github.com/bluesky-social/atproto/blob/main/LICENSE.txt
servers:
- url: https://public.api.bsky.app/xrpc
description: Public AppView (unauthenticated read operations)
- url: https://api.bsky.app/xrpc
description: Authenticated AppView (write operations)
security:
- bearerAuth: []
- {}
tags:
- name: notification
description: Notification management
paths:
/app.bsky.notification.listNotifications:
get:
operationId: app_bsky_notification_listNotifications
summary: List Notifications
description: Enumerate notifications for the requesting account. Requires auth.
tags:
- notification
parameters:
- name: reasons
in: query
required: false
description: Notification reasons to include in response.
schema:
type: array
items:
type: string
style: form
explode: true
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 50
- name: priority
in: query
required: false
schema:
type: boolean
- name: cursor
in: query
required: false
schema:
type: string
- name: seenAt
in: query
required: false
schema:
type: string
format: date-time
responses:
'200':
description: Notifications
content:
application/json:
schema:
type: object
required:
- notifications
properties:
cursor:
type: string
notifications:
type: array
items:
$ref: '#/components/schemas/Notification'
priority:
type: boolean
seenAt:
type: string
format: date-time
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/app.bsky.notification.getUnreadCount:
get:
operationId: app_bsky_notification_getUnreadCount
summary: Get Unread Count
description: Count the number of unread notifications for the requesting account. Requires auth.
tags:
- notification
parameters:
- name: priority
in: query
required: false
schema:
type: boolean
- name: seenAt
in: query
required: false
schema:
type: string
format: date-time
responses:
'200':
description: Unread notification count
content:
application/json:
schema:
type: object
required:
- count
properties:
count:
type: integer
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
components:
schemas:
Label:
type: object
required:
- src
- uri
- val
- cts
properties:
ver:
type: integer
src:
type: string
description: DID of the actor who created this label
uri:
type: string
description: AT URI of the record, repository (account), or other resource this label applies to
cid:
type: string
description: Optionally constrains label to specific version of record/blob
val:
type: string
description: The short string name of the value or type of this label
maxLength: 128
neg:
type: boolean
description: If true, this is a negation label, overwriting a previous label
cts:
type: string
format: date-time
description: Timestamp when this label was created
exp:
type: string
format: date-time
description: Timestamp at which this label expires
Error:
type: object
required:
- error
- message
properties:
error:
type: string
message:
type: string
ViewerState:
type: object
description: Metadata about the relationship between the requesting account and the subject account.
properties:
muted:
type: boolean
mutedByList:
type: object
additionalProperties: true
blockedBy:
type: boolean
blocking:
type: string
description: AT-URI of the blocking record, if present
blockingByList:
type: object
additionalProperties: true
following:
type: string
description: AT-URI of the follow record, if present
followedBy:
type: string
description: AT-URI of the follow record from the subject to the requester
knownFollowers:
type: object
additionalProperties: true
Notification:
type: object
required:
- uri
- cid
- author
- reason
- record
- isRead
- indexedAt
properties:
uri:
type: string
description: AT-URI of the notification record
cid:
type: string
author:
$ref: '#/components/schemas/ProfileView'
reason:
type: string
description: Expected values are 'like', 'repost', 'follow', 'mention', 'reply', 'quote', 'starterpack-joined'
enum:
- like
- repost
- follow
- mention
- reply
- quote
- starterpack-joined
reasonSubject:
type: string
description: AT-URI of the record that is the subject of the notification
record:
type: object
additionalProperties: true
isRead:
type: boolean
indexedAt:
type: string
format: date-time
labels:
type: array
items:
$ref: '#/components/schemas/Label'
ProfileView:
type: object
required:
- did
- handle
properties:
did:
type: string
handle:
type: string
displayName:
type: string
description:
type: string
avatar:
type: string
format: uri
associated:
type: object
additionalProperties: true
indexedAt:
type: string
format: date-time
createdAt:
type: string
format: date-time
viewer:
$ref: '#/components/schemas/ViewerState'
labels:
type: array
items:
$ref: '#/components/schemas/Label'
responses:
Unauthorized:
description: Authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Bad request or validation error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: Access JWT obtained from com.atproto.server.createSession
externalDocs:
description: Bluesky HTTP API Reference
url: https://docs.bsky.app/docs/advanced-guides/atproto