Skip to main content

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.

Migrating from Pushover usually requires changing one URL. Point your existing Pushover sender at:
https://api.reflecto.dev/v1/messages.json
…and put a Reflecto sender token (rfk_live_…) in Pushover’s token field. The user field stays in the request for client compatibility but is ignored — the Reflecto token already identifies the user.

Example

curl -s \
  --form-string "token=rfk_live_aB3xQ7mN9pK2vR5tY8uW4sZ1cE6dF0gH" \
  --form-string "user=ignored" \
  --form-string "message=Backup done" \
  https://api.reflecto.dev/v1/messages.json
Response (Pushover’s exact shape):
{ "status": 1, "request": "msg_abc123def456" }
request is Reflecto’s internal msg_* id, surfaced verbatim so log correlation works.

Field mapping

PushoverReflecto
tokenSender token (must be rfk_live_…).
userIgnored.
messagemessage.
titletitle.
priority-2min, -1low, 0default, 1high.
urlurl.
url_titleurl_title.
devicedevice (comma-separated list supported).
ttlttl.
soundAccepted but ignored (no custom sounds in MVP).
timestampAccepted but ignored; server uses current time.

Intentionally unsupported

  • priority=2 (Emergency). Pushover’s Emergency priority requires acknowledgment tracking via callback + receipt polling. Reflecto does not implement that contract, so we reject up-front with 400:
    { "status": 0, "errors": ["priority_emergency_unsupported"] }
    
    Silent downgrade to urgent would break migrations that depend on the receipt loop.
  • Custom sounds, attachments, HTML rendering, monthly limits API. Not in MVP. If you depend on any of these, file an issue on GitHub with your use case.

Error shape

Failures are wrapped in Pushover’s { status: 0, errors: [...] } shape, with the same HTTP status code as the underlying /v1/send failure (400, 401, 413, 429, 500). Rate-limit Retry-After headers are preserved.