# Push a notice to a person's browsers (or one subscription)

`POST /notify/push/send` · Rivier · campaigns

Push a notice to a person's browsers (or one subscription): title, body, an address to open, a tag that replaces an earlier notice. A subscription the push service says has ended is marked and raised as campaigns.push.expired.

- Scope: campaigns:write
- Mcp: rivier_notify_push_send
- Graphql: Mutation.campaignsNotifyPushSend
- Sdk: campaigns.notifyPush.send
- Cli: campaigns notify push send
- Events: campaigns.push.expired

## Request body

`application/json`

```json
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "body": {
      "type": "string",
      "maxLength": 1000,
      "default": ""
    },
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 1000
    },
    "icon": {
      "type": "string",
      "format": "uri",
      "maxLength": 1000
    },
    "userRef": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Your own id for the person; Rivier keeps it as given and never shows it to anyone else"
    },
    "subscriptionId": {
      "type": "string",
      "format": "uuid"
    },
    "tag": {
      "type": "string",
      "maxLength": 64,
      "description": "A later notice with the same tag replaces this one on the device"
    },
    "data": {
      "type": "object",
      "additionalProperties": {}
    },
    "ttlSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 2419200,
      "default": 86400
    },
    "urgency": {
      "type": "string",
      "enum": [
        "very-low",
        "low",
        "normal",
        "high"
      ],
      "default": "normal"
    },
    "topic": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,32}$",
      "description": "A push waiting with the same topic is replaced at the push service"
    }
  },
  "required": [
    "title"
  ],
  "additionalProperties": false
}
```

## Responses

- `200`: Success
- `400`: The request was malformed
- `401`: No valid credential
- `403`: The credential lacks the scope, origin or address
- `429`: Over the key's rate limit; see Retry-After

## Example

```sh
curl -X POST 'https://api.rivier.ai/notify/push/send' \
  -H 'Authorization: Bearer $KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "string"
}'
```
