---
title: push API methods
description: >-
Subscribe to and receive push notifications when a server-side notification is
received, via the Web Push API
menu:
docs:
weight: 10
name: push
parent: methods-notifications
identifier: methods-push
aliases: [
"/methods/push",
"/api/methods/push",
"/methods/notifications/push",
]
---
## About the Web Push API {#about}
Mastodon natively supports the [Web Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API). You can utilize the same mechanisms for your native app. It requires running a proxy server that connects to Android’s and Apple’s proprietary notification gateways. However, the proxy server does not have access to the contents of the notifications. For a reference, see [Mozilla’s web push server](https://github.com/mozilla-services/autopush), or more practically, see:
* [toot-relay](https://github.com/DagAgren/toot-relay)
* [PushToFCM](https://github.com/tateisu/PushToFCM)
* [metatext-apns](https://github.com/metabolist/metatext-apns)
---
## Subscribe to push notifications {#create}
```http
POST /api/v1/push/subscription HTTP/1.1
```
Add a Web Push API subscription to receive notifications. Each access token can have one push subscription. If you create a new subscription, the old subscription is deleted.
**Returns:** [WebPushSubscription]({{< relref "entities/WebPushSubscription" >}})\
**OAuth:** User token + `push`\
**Version history:**\
2.4.0 - added\
3.3.0 - added `data[alerts][status]`\
3.4.0 - added `data[policy]`\
3.5.0 - added `data[alerts][update]` and `data[alerts][admin.sign_up]`\
4.0.0 - added `data[alerts][admin.report]`
#### Request
##### Headers
Authorization
: {{}} Provide this header with `Bearer ` to gain authorized access to this API method.
##### Form data parameters
subscription[endpoint]
: {{}} String. The endpoint URL that is called when a notification event occurs.
subscription[keys][p256dh]
: {{}} String. User agent public key. Base64 encoded string of a public key from a ECDH keypair using the `prime256v1` curve.
subscription[keys][auth]
: {{}} String. Auth secret. Base64 encoded string of 16 bytes of random data.
data[alerts][mention]
: Boolean. Receive mention notifications? Defaults to false.
data[alerts][status]
: Boolean. Receive new subscribed account notifications? Defaults to false.
data[alerts][reblog]
: Boolean. Receive reblog notifications? Defaults to false.
data[alerts][follow]
: Boolean. Receive follow notifications? Defaults to false.
data[alerts][follow_request]
: Boolean. Receive follow request notifications? Defaults to false.
data[alerts][favourite]
: Boolean. Receive favourite notifications? Defaults to false.
data[alerts][poll]
: Boolean. Receive poll notifications? Defaults to false.
data[alerts][update]
: Boolean. Receive status edited notifications? Defaults to false.
data[alerts][admin.sign_up]
: Boolean. Receive new user signup notifications? Defaults to false. Must have a role with the appropriate permissions.
data[alerts][admin.report]
: Boolean. Receive new report notifications? Defaults to false. Must have a role with the appropriate permissions.
data[policy]
: String. Specify whether to receive push notifications from `all`, `followed`, `follower`, or `none` users.
#### Response
##### 200: OK
A new PushSubscription has been generated, which will send the requested alerts to your endpoint.
```json
{
"id": 328183,
"endpoint": "https://yourdomain.example/listener",
"alerts": {
"follow": true,
"favourite": true,
"reblog": true,
"mention": true,
"poll": true
},
"server_key": "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M="
}
```
##### 401: Unauthorized
Invalid or missing Authorization header.
```json
{
"error": "The access token is invalid"
}
```
---
## Get current subscription {#get}
```http
GET /api/v1/push/subscription HTTP/1.1
```
View the PushSubscription currently associated with this access token.
**Returns:** [WebPushSubscription]({{< relref "entities/WebPushSubscription" >}})\
**OAuth:** User token + `push`\
**Version history:**\
2.4.0 - added
#### Request
##### Headers
Authorization
: {{}} Provide this header with `Bearer ` to gain authorized access to this API method.
#### Response
##### 200: OK
```json
{
"id": 328183,
"endpoint": "https://yourdomain.example/listener",
"alerts": {
"follow": true,
"favourite": true,
"reblog": true,
"mention": true,
"poll": true
},
"server_key": "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M="
}
```
##### 401: Unauthorized
Invalid or missing Authorization header.
```json
{
"error": "The access token is invalid"
}
```
##### 404: Not found
A PushSubscription does not exist for this token.
```json
{
"error": "Record not found"
}
```
---
## Change types of notifications {#update}
```http
PUT /api/v1/push/subscription HTTP/1.1
```
Updates the current push subscription. Only the data part can be updated. To change fundamentals, a new subscription must be created instead.
**Returns:** [WebPushSubscription]({{< relref "entities/WebPushSubscription" >}})\
**OAuth:** User token + `push`\
**Version history:**\
2.4.0 - added\
3.3.0 - added `data[alerts][status]`\
3.4.0 - added `policy`\
3.5.0 - added `data[alerts][update]` and `data[alerts][admin.sign_up]`\
4.0.0 - added `data[alerts][admin.report]`
#### Request
##### Headers
Authorization
: {{}} Provide this header with `Bearer ` to gain authorized access to this API method.
##### Form data parameters
data[alerts][mention]
: Boolean. Receive mention notifications? Defaults to false.
data[alerts][status]
: Boolean. Receive new subscribed account notifications? Defaults to false.
data[alerts][reblog]
: Boolean. Receive reblog notifications? Defaults to false.
data[alerts][follow]
: Boolean. Receive follow notifications? Defaults to false.
data[alerts][follow_request]
: Boolean. Receive follow request notifications? Defaults to false.
data[alerts][favourite]
: Boolean. Receive favourite notifications? Defaults to false.
data[alerts][poll]
: Boolean. Receive poll notifications? Defaults to false.
data[alerts][update]
: Boolean. Receive status edited notifications? Defaults to false.
data[alerts][admin.sign_up]
: Boolean. Receive new user signup notifications? Defaults to false. Must have a role with the appropriate permissions.
data[alerts][admin.report]
: Boolean. Receive new report notifications? Defaults to false. Must have a role with the appropriate permissions.
policy
: String. Specify whether to receive push notifications from `all`, `followed`, `follower`, or `none` users.
#### Response
##### 200: OK
Updating a PushSubscription to only receive mention alerts
```json
{
"id": 328183,
"endpoint": "https://yourdomain.example/listener",
"alerts": {
"follow": false,
"favourite": false,
"reblog": false,
"mention": true,
"poll": false
},
"server_key": "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M="
}
```
##### 401: Unauthorized
Invalid or missing Authorization header.
```json
{
"error": "The access token is invalid"
}
```
##### 404: Not found
No existing PushSubscription for this token
```json
{
"error": "Record not found"
}
```
---
## Remove current subscription {#delete}
```http
DELETE /api/v1/push/subscription HTTP/1.1
```
Removes the current Web Push API subscription.
**Returns:** none\
**OAuth:** User token + `push`\
**Version history:**\
2.4.0 - added
#### Request
##### Headers
Authorization
: {{}} Provide this header with `Bearer ` to gain authorized access to this API method.
#### Response
##### 200: OK
PushSubscription successfully deleted or did not exist previously
```json
{}
```
##### 401: Unauthorized
Invalid or missing Authorization header.
```json
{
"error": "The access token is invalid"
}
```
---
## See also
{{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/push/subscriptions_controller.rb" caption="app/controllers/api/v1/push/subscriptions_controller.rb" >}}