Skip to main content
POST
/
v1
/
messages.json
Pushover-compatible send shim
curl --request POST \
  --url https://api.reflecto.dev/v1/messages.json \
  --header 'Content-Type: application/json' \
  --data '
{
  "token": "rfk_live_aB3xQ7mN9pK2vR5tY8uW4sZ1cE6dF0gH",
  "message": "Backup done",
  "user": "u_pushover_legacy",
  "title": "Backup",
  "priority": 0,
  "url": "https://example.com",
  "url_title": "View",
  "device": "phone",
  "ttl": 259200,
  "sound": "default",
  "timestamp": 123
}
'
{
  "request": "msg_3f6e2a7c9b1d4f8e8a5b6c1d2e3f4a5b"
}

Documentation Index

Fetch the complete documentation index at: https://docs.reflecto.dev/llms.txt

Use this file to discover all available pages before exploring further.

Body

Pushover-compatible send payload. Accepts the exact field set so existing Pushover clients can migrate by changing one URL. Unknown fields are ignored.

token
string
required

Reflecto sender token (rfk_live_… or rfk_test_…). Stands in for Pushover's app token.

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

"rfk_live_aB3xQ7mN9pK2vR5tY8uW4sZ1cE6dF0gH"

message
string
required

Notification body. Required by Pushover; same semantics as /v1/send.

Example:

"Backup done"

user
string

Accepted for Pushover-client compatibility; the value is ignored (the token already identifies the user).

Example:

"u_pushover_legacy"

title
string

Optional title. Same byte cap as /v1/send (100 bytes UTF-8).

Example:

"Backup"

priority

Pushover priority. -2 → min, -1 → low, 0 → default, 1 → high. 2 (Emergency) is accepted by the wire schema but rejected server-side with 400 priority_emergency_unsupported — Reflecto does not implement Pushover's receipt-polling contract, so silently downgrading would break migrations that depend on it.

Available options:
0,
1,
2,
-2,
-1
Example:

0

url
string<uri>
Example:

"https://example.com"

url_title
string
Example:

"View"

device
string

Optional target device(s); same semantics as /v1/send.

Example:

"phone"

ttl

Seconds the message stays in the per-device queue if not delivered live. Capped at 72 hours (259200 s) to match the Redis queue TTL. Same semantics as SendRequest.ttl — both endpoints feed through the shared processSend clamp. The string branch is only meaningful for form-encoded callers (Pushover senders post ttl=600); JSON callers should use the integer branch.

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

259200

sound
string

Accepted for Pushover-client compatibility; ignored in MVP (no custom sounds).

Example:

"default"

timestamp

Accepted for Pushover-client compatibility; ignored (server uses current time).

Response

Accepted, wrapped in Pushover's success shape.

status
enum<number>
required
Available options:
1
request
string
required

Opaque request id. Reflecto returns the internal msg_* id for log correlation.

Example:

"msg_3f6e2a7c9b1d4f8e8a5b6c1d2e3f4a5b"