Skip to main content
POST
Send via capability URL (path-token alias)

Path Parameters

token
string
required

Reflecto sender token (rfk_live_… or rfk_test_…).

Pattern: ^rfk_(live|test)_[A-Za-z0-9]{32}$
Example:

"rfk_live_aB3xQ7mN9pK2vR5tY8uW4sZ1cE6dF0gH"

Body

Canonical send payload. Form-encoded and text/plain bodies are documented in the guides — the server normalises them to this shape.

message
string
required

Notification body as plain text — write quotes and newlines literally, never JSON-escape them (no " or \n sequences; the JSON layer handles encoding). Required. 1–1500 bytes (UTF-8). maxLength is omitted from the schema because JSON Schema measures characters, not bytes — server enforces a byte cap to keep the 2 KB envelope budget honest across CJK / emoji content.

Minimum string length: 1
Example:

"Backup finished in 12m"

title
string

Headline rendered above the body. 1–100 bytes (UTF-8). Schema omits maxLength because JSON Schema measures characters, not bytes.

Minimum string length: 1
Example:

"Backup"

priority
enum<string>
default:default

Notification priority. min/low use normal FCM; rest use high.

Available options:
min,
low,
default,
high,
urgent
Example:

"default"

tags
string[]

Up to 5 tags rendered as labels. Oversize / overcount entries are truncated with a warning rather than rejected — maxItems is deliberately omitted so SDK generators don't client-side-reject valid-but-overcount inputs that the server will accept and trim.

Tag string. Oversize / overcount entries are truncated with a warning rather than rejected.

url
string<uri>

Clickable URL attached to the notification. http(s) only, ≤ 512 bytes.

Example:

"https://example.com/backup/123"

url_title
string

Display text for url. ≤ 32 bytes (UTF-8). Schema omits maxLength because JSON Schema measures characters, not bytes.

Example:

"View report"

actions
object[]

Up to 3 action buttons. Each button opens its url when tapped. Overcount entries are truncated with a warning — maxItems is deliberately omitted so SDK generators don't client-side-reject.

device
string
default:all

Target device(s). all (default), mobile (alias phone), pc (every computer — browser extension, web app, CLI and desktop app), desktop (the native desktop app only), a comma-separated list of device labels, or an exact device id. Labels are not unique — one shared by two devices delivers to both, so pass an id to reach exactly one. all, mobile, phone, pc and desktop are reserved: a device you have NAMED after one of them is not reachable by that name, only by its id. An unknown label becomes a warning and falls back to delivering everywhere; a reserved word that matches none of your devices delivers to nobody and says so in warnings.

Maximum string length: 256
Example:

"all"

markdown
boolean
default:false

Render the body as Markdown on the extension. Ignored on Android in MVP.

Example:

false

ttl
integer
default:259200

Seconds the message stays in the per-device queue if not delivered live. Out-of-range values are clamped to the [0, 259200] range (72 hours, matching the Redis queue TTL) and a warning is returned.

Required range: 0 <= x <= 259200
Example:

259200

Response

Accepted and enqueued.

id
string
required
Example:

"msg_3f6e2a7c9b1d4f8e8a5b6c1d2e3f4a5b"

delivered_to
object[]
required
warnings
string[]
required