Headers, auth, and the HTTP surface used by both SDKs.

API reference

Base URL: YOUR_API_URL

All JSON. Typical envelope: { "data": ... } or { "error": "code", "message": "..." }.

Headers

HeaderWhen
Content-Type: application/jsonbody requests
X-Application-Code: YOUR_APP_CODEidentify app
X-Application-Id: <uuid>alternative to code
X-Public-Key: rb_pub_…paywall, payments, CMS Site
Authorization: Bearer <jwt>user-scoped routes

Public

Get paywall

GET /v1/applications/{app_code}/paywalls/{paywall_code}
X-Public-Key: YOUR_PUBLIC_KEY

Remote config

GET /v1/applications/{app_code}/config?platform=web&app_version=1.0.0

Branding

GET /v1/applications/{app_code}/branding
X-Public-Key: YOUR_PUBLIC_KEY

Banners

GET /v1/applications/{app_code}/banners/{banner_code}
X-Public-Key: YOUR_PUBLIC_KEY
GET /v1/sites/{site_code}/banners/{banner_code}
X-Public-Key: YOUR_CMS_SITE_KEY

Authenticated (end user)

Register / profile

POST /v1/applications/{app_code}/users/register
Authorization: Bearer YOUR_ACCESS_TOKEN

{
  "platform": "web",
  "display_name": "Ivan",
  "avatar_url": "https://cdn.example.com/a.jpg",
  "timezone": "Europe/Moscow",
  "acquisition_source": "organic",
  "explicit_consent": true,
  "consents": [
    {
      "document_id": "YOUR_LEGAL_DOCUMENT_UUID",
      "version": "1",
      "checkbox_text": "I accept the User Agreement",
      "accepted": true
    }
  ]
}
GET /v1/applications/{app_code}/users/me/consents
Authorization: Bearer YOUR_ACCESS_TOKEN
POST /v1/applications/{app_code}/users/me/consents
Authorization: Bearer YOUR_ACCESS_TOKEN

{
  "source_screen": "reconsent_modal",
  "consents": [ /* document_id, version, checkbox_text, accepted */ ]
}
PATCH /v1/applications/{app_code}/users/me
Authorization: Bearer YOUR_ACCESS_TOKEN

{
  "display_name": "Ivan P.",
  "avatar_url": "https://cdn.example.com/a2.jpg"
}

Name and avatar_url sync into Platform admin. Geo (country_code, city, timezone) is filled from IP on first contact. Guide: Users & profile.

Entitlements

GET /v1/applications/{app_code}/entitlements/me
Authorization: Bearer YOUR_ACCESS_TOKEN

Create payment

POST /v1/payments
Authorization: Bearer YOUR_ACCESS_TOKEN
X-Public-Key: YOUR_PUBLIC_KEY

{
  "application_code": "YOUR_APP_CODE",
  "plan_price_id": "uuid",
  "return_url": "https://your.app/return"
}

Paid only. Free prices → 400 free_plan_offline.

License key

POST /v1/applications/{app_code}/license-keys/activate
Authorization: Bearer YOUR_ACCESS_TOKEN

{ "key": "RB-....", "installation_id": "optional" }

Devices

POST /v1/devices/register
GET  /v1/devices?application_code=YOUR_APP_CODE
DELETE /v1/devices/{device_id}

Features

GET /v1/applications/{app_code}/features?platform=android&app_version=1.0.0

Events

POST /v1/events
POST /v1/events/batch

Event application binding: application_id / application_code in the body or X-Application-Id / X-Application-Code headers (lookup via service role).

Webhooks (server)

Payment provider webhooks hit the Platform API (not the marketing site). Configure the provider URL to the Platform payments webhook path provided in your deployment docs. Never put provider secrets in the client SDK.

CMS Site (public read)

GET /v1/applications/YOUR_APP_CODE/sites/YOUR_SITE_CODE/blog/posts
GET /v1/applications/YOUR_APP_CODE/sites/YOUR_SITE_CODE/kb/tree
GET /v1/applications/YOUR_APP_CODE/sites/YOUR_SITE_CODE/downloads
GET /v1/applications/YOUR_APP_CODE/sites/YOUR_SITE_CODE/changelog
X-Public-Key: YOUR_PUBLIC_KEY

Guide: CMS Site.