# Notifications API

> Poll your integration's notification feed to find out when new quote requests arrive.

- Human documentation: https://www.myrepairapp.com/api-docs/notifications
- OpenAPI: https://www.myrepairapp.com/openapi.json
- Last updated: 2026-08-26T08:24:19.949Z

## The Notification Model

The Notification object represents an in-app notification delivered to your API integration. Use notifications to find out when new quote requests arrive without repeatedly listing all quotes. Below is an example of a Notification object with all possible fields.

```json
{
  "id": "jd7c2v9k4m8p1q3r5s6t7u8v",
  "read": false,
  "createdAt": 1751394600000,
  "type": "QuoteCreated",
  "title": "New Quote",
  "message": "John Doe requested a quote for iPhone 12 (Screen Repair) at Main St Repair.",
  "entityId": "0197a1b2-3c4d-7e5f-8a9b-0c1d2e3f4a5b"
}
```

### Notification Object Properties

| Field                   | Type      | Required | Description                                                                                                                                                        |
| ----------------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id` (read-only)        | `string`  | No       | The unique identifier for the notification. Use it to mark the notification as read.                                                                               |
| `read`                  | `boolean` | No       | Indicates if the notification has been marked as read by your integration.                                                                                         |
| `createdAt` (read-only) | `number`  | No       | The date and time the notification was created, as a Unix timestamp in milliseconds.                                                                               |
| `type`                  | `string`  | No       | The notification type. New quote requests have the type `QuoteCreated`.                                                                                            |
| `title`                 | `string`  | No       | A short title for the notification.                                                                                                                                |
| `message`               | `string`  | No       | The human-readable notification message.                                                                                                                           |
| `entityId`              | `string`  | No       | The ID of the related record. For `QuoteCreated` notifications, this is the quote ID: use it with the Quotes API to fetch the full quote. Omitted when there is no related record. |

Note: Your integration's notification feed starts accruing from the moment your API key is generated. Each store has a single API machine user, so every integration using your store's API key shares the same feed and the same read state. Notifications have their own read state: marking a notification as read through the API does not affect what store employees see in the app.

The feed receives organization-wide notifications only. Admin-only notifications, such as invoice paid and ACH status updates, are never delivered to the API.

Notifications are deleted 30 days after they are created, whether or not they were read, so poll at least that often.

***

## Notification Resources

### Get notifications

This endpoint returns your integration's notifications, newest first.

**HTTP Request**

```http
GET https://www.myrepairapp.com/api/v2/notifications?unreadOnly={boolean}&limit={number}&cursor={number}
```

**Parameters**

All parameters are optional.

The `unreadOnly` parameter, when set to `true`, returns only unread notifications. A typical polling flow is to request `unreadOnly=true`, process the results (e.g., fetch each `QuoteCreated` notification's quote by its `entityId`), and then mark the processed notifications as read.

The `limit` parameter sets the maximum number of notifications returned and defaults to `20` (maximum `100`).

The `cursor` parameter is used for pagination. Pass the `nextCursor` value from a previous response to fetch the next page. When `nextCursor` is `null`, there are no more results. A non-numeric `cursor` returns a `400` response.

**Response**

If successful, the response will include a list of notifications and a pagination cursor.

```json
{
  "data": [
    {
      "id": "jd7c2v9k4m8p1q3r5s6t7u8v",
      "read": false,
      "createdAt": 1751394600000,
      "type": "QuoteCreated",
      "title": "New Quote",
      "message": "John Doe requested a quote for iPhone 12 (Screen Repair) at Main St Repair.",
      "entityId": "0197a1b2-3c4d-7e5f-8a9b-0c1d2e3f4a5b"
    }
  ],
  "nextCursor": 1751394600000
}
```

***

### Mark notifications as read

This endpoint marks notifications as read. Only notifications belonging to your integration can be marked as read: IDs that belong to someone else are ignored, and malformed IDs return a `400` response.

**HTTP Request**

```http
POST https://www.myrepairapp.com/api/v2/notifications/mark-read
```

**Request Body**

| Field | Type       | Required | Description                                                          |
| ----- | ---------- | -------- | -------------------------------------------------------------------- |
| `ids` | `string[]` | Yes      | The IDs of the notifications to mark as read (1 to 100 per request). |

**Response**

If successful, the response confirms the request was applied. Ignored IDs are not reported, so the response looks the same whether every ID or only some of them belonged to your integration.

```json
{
  "success": true
}
```

If one or more IDs are malformed, the endpoint returns a `400` response and no notifications are marked:

```json
{
  "message": "One or more notification IDs are invalid."
}
```
