Push

Richie Push API

REST API for sending push notifications to Richie apps

Richie Push API is a server-to-server REST API which can be used by the publishers to send push notifications to Richie apps running on iOS and Android devices.

Request

  • Method: POST
  • URL:
https://data.richie.app/push/v2/admin/task
  • Headers:
Authorization: Basic <credentials>
Content-Type: application/json

HTTP Basic auth credentials will be provided to Richie Push API integrators by Richie.

Body

{
  "app_id": "your-app-id",
  "topics": [
    "breaking-news",
    "sports",
    "culture"
  ],
  "payloads": {
    "ios": {
      "aps": {
        "alert": {
          "title": "Push Notification Title for iOS",
          "body": "Push Notification Body Text for iOS",
          "publisher-item-id": "100200",
        },
        "content-available": 1
        "issue-guid": "2258b0e6-6748-46c2-8e67-0893c0542fbb",
        "issue-page": 10
      }
    },
    "android": {
      "data": {
        "title": "Push Notification Title for Android",
        "body": "Push Notification Body Text for Android",
        "external-browser-url": "https://example.com/news/article/1",
        "issue-guid": "2258b0e6-6748-46c2-8e67-0893c0542fbb",
        "issue-page": 10
      }
    }
  }
}

app_id

The client app identifier. This value will be provided to Richie Push API integrators by Richie.

topics

With topics you can target specific groups of app clients. Client apps can register to a set of topics and push notifications can then be sent to those topics. Topics are app-specific, and are configured separately from Push API.

To send push notification to all client apps regardless of their topic subscriptions, use the special topic all_users.

payloads

The following keys can be used to specify the contents of a notification:

  • title
  • body
  • publisher-item-id
  • external-browser-url
  • issue-guid
  • issue-page
  • issue-title
  • issue-product-tag
  • tab-id

These keys can be sent to either iOS clients, Android clients or all clients.

  • For iOS, place these keys in ios { aps { alert { … } } } object
  • For Android, place these keys in android { data { alert { … } } } object

Max size for each payload (ios and android) is 4 KB.

title

The notification's title. Optional, string.

body

The notification's body text. Required, string.

publisher-item-id

Publisher's identifier for the news item related to current notification. Client apps will use this identifier for opening related news item if user taps on the notification. This value must be present in the news feed consumed by the client apps.

If this key is omitted, tapping on the notification will bring the app to the foreground without any navigation action. Optional, string.

If this value is provided, external-browser-url should be omitted.

external-browser-url

A full HTTPS URL which should be opened in an external mobile browser when user taps on the current notification. If this value is provided, publisher-item-id should be omitted.

Optional, HTTPS URL string.

issue-guid and issue-page

If specified, this must be the uuid string value of an Richie Editions Issue (https://richie.dev/docs/editions/indexes) and an optional page number, an integer, to open the issue to. If the page number is not specified, the issue will be opened to the first page.

issue-title, issue-product-tag and issue-page

If you don't have access to Richie Editions identifiers but know the titles of the editions, you can use title search with issue-title and issue-product-tag. An optional issue-page integer is supported.

tab-id

You can send the user to a specific application tab with the tab-id field. The value is an internal tab identifier Richie uses when configuring an app, so coordinate with developers to find out the values.

tab-id was added in late 2024. If there's a chance some of your users might be on a version that does not support it, it can be a good idea to use external-browser-url as a fallback. Both can be specified in the same push but tab-id is parsed first, so users on new apps will get tab selection and users on older apps will get the external URL.

content-available

This flag is relevant for iOS only, and should be placed directly under the aps object (NOT under alert). If content-available is set to 1, the operating system is asked to launch the app in the background when push notification is received, even if user does not tap on it. This gives the app a chance to update and cache the latest news feeds, so they are readily available when user opens the app the next time.

Response

HTTP 201

Returned when push notification payload was accepted for delivery to the mobile clients. The delivery is asyncronous. In most cases, it takes less than 60 seconds to reach all end user devices.

HTTP 401

Returned if HTTP Basic auth credentials were invalid. Please contact Richie to get valid credentials for your app.

User-specific request

Target a single or several clients by using external_user_ids instead of topics.

  • Method: POST
  • URL:
https://data.richie.app/push/v2/admin/task
  • Headers:
Authorization: Basic <credentials>
Content-Type: application/json

HTTP Basic auth credentials will be provided to Richie Push API integrators by Richie.

Body

{
  "app_id": "your-app-id",
  "external_user_ids": [
    "abcde...",
    "12345..."
  ],
  "payloads": {
    "ios": {
      "aps": {
        "alert": {
          "title": "Push Notification Title for iOS",
          "body": "Push Notification Body Text for iOS",
          "publisher-item-id": "100200",
        },
        "content-available": 1
      }
    },
    "android": {
      "data": {
        "title": "Push Notification Title for Android",
        "body": "Push Notification Body Text for Android",
        "external-browser-url": "https://example.com/news/article/1"
      }
    }
  }
}

Content analytics

Push payload may contain additional fields which can be used in content analytics. For example, if push notification refers to a news item using the publisher-item-id key, the analytics event which is posted when that news item is opened can refer to the values included in the push payload. The configuration of analytics events themselves is done separately by Richie team and it may target various analytics backends.

An example push payload with extra keys for content analytics:

  [...],
  "payloads": {
    "ios": {
      "aps": {
        "alert": {
          "title": "Push Notification Title for iOS",
          "body": "Push Notification Body Text for iOS",
          "publisher-item-id": "100200",
          "custom_key": "custom_value"
        },
        "content-available": 1
      }
    },
    "android": {
      "data": {
        "title": "Push Notification Title for Android",
        "body": "Push Notification Body Text for Android",
        "publisher-item-id": "100200",
        "custom_key": "custom_value"
      }
    }
  }

Limitations

  • Additional keys used in analytics cannot contain dash characters (-) due to internal platform limitations
  • Nested keys are not supported. All additional keys must be on the same level as the default payload keys (such as title, body, etc)

Push delivery analytics

Optional push delivery analytics can be configured, where each push task will be reported to a desired endpoint. The endpoint must authenticate the analytics data request and decode a JSON body.

An example POST request body which will be sent to the configured endpoint:

{
  "app_id": "an-app",
  "completion_time_ms": 765,
  "deletions": 0,
  "failures": 17,
  "payloads": {
    "android": {
      "data": {
        "alert": {
          "body": "Push Notification Body Text for Android",
          "external-browser-url": "https://example.com/news/article/1",
          "title": "Push Notification Title for Android"
        },
        "task_id": "00f5c216-ee53-4e29-af13-f109d5563a9e"
      }
    },
    "ios": {
      "aps": {
        "alert": {
          "body": "Push Notification Body Text for iOS",
          "publisher-item-id": "100201",
          "title": "Push Notification Title for iOS"
        },
        "content-available": 1,
        "task_id": "00f5c216-ee53-4e29-af13-f109d5563a9e"
      }
    }
  },
  "successes": 14400,
  "topics": [
    "all_users",
    "food"
  ]
}
Previous
Richie Entitlements API