:::endpoint GET /v1/me/notifications

Newest first. Archived ones are left out: archiving is how somebody says they
are done with a notice, and a list that keeps handing it back has not listened.

## Request

```bash
curl "https://api.proppertrading.com/v1/me/notifications?limit=20" \
  -H "Authorization: Bearer ptat_9f2c1a44_3b8e7d2f5c9a1b4e6d8f0a2c4e6b8d1f"
```

| Parameter | Description                            |
| --------- | -------------------------------------- |
| `unread`  | `1` to leave out the ones already read |
| `limit`   | Up to 100. Defaults to 20              |

## Response

```json
{
    "data": [
        {
            "id": "9f2c1a44-3b8e-4d2f-5c9a-1b4e6d8f0a2c",
            "object": "notification",
            "type": "new_device_signed_in",
            "title_key": "notifications/new-device-signed-in.title",
            "message_key": "notifications/new-device-signed-in.message",
            "params": { "device": "Jamie iPhone", "app": "Propper Mail" },
            "action_url": "/settings/security",
            "action_label_key": "notifications/new-device-signed-in.action_label",
            "read_at": null,
            "created_at": "2026-08-19T18:03:33+00:00"
        }
    ],
    "meta": { "request_id": "req_01kz4bkr1aj1gv63d8fv3133ey", "unread": 1 }
}
```

## Keys, not sentences

`title_key` and `message_key` are translation keys and `params` fills them in.
Nothing here is a finished sentence, on purpose: the reader picks the language,
and a notice written six months ago still comes out in today's wording rather
than in whatever was true when it was raised.

Look the keys up in your own copy of the translations. `type` is there so a
client can branch on the kind of notice without parsing a key.

`action_url` is a path inside the web application. An app should map the ones it
knows onto its own screens and fall back to opening the web version.

## Errors

| Status | Code                 | Meaning                                        |
| ------ | -------------------- | ---------------------------------------------- |
| 400    | `invalid_limit`      | Not a positive integer                         |
| 403    | `insufficient_scope` | This device does not hold `notifications:read` |