Send a text document to your paired phone's Downloads folder (send_file)
Not yet enabled. This endpoint is rolling out alongside the Android release that can receive documents — until then, calls receive a plain 404 Not Found with no response body, indistinguishable from a route that doesn’t exist.
Sends a text document to the paired phone on the account behind the bearer token. The server holds content in plaintext RAM only for the duration of this call (disclosed server-as-sender tier, same as POST /v1/send) — it is encrypted once to the phone’s public key, parked as an opaque ciphertext blob for up to 1 hour, and the phone pulls it via an FCM-nudged GET /v1/documents/{documentId}, then writes it into Downloads. Nothing is retained server-side beyond that 1 hour window.
Filenames are restricted to plain-text/code extensions — never .html/.svg, which render and execute if tapped from Downloads (400 invalid_filename). content must be non-empty and at most 131072 bytes (400 invalid_content / 413 content_too_large).
Requires a paired phone device on the account behind the bearer token (409 no_phone_device).
Phone-capability gate — fail-closed, unlike the other agent-actuated tools. If the paired phone’s reported app build is too old to receive documents, the request is refused outright (426 phone_app_outdated). Unlike remind_me/request_approval/find_my_phone, a phone that has never reported its version is ALSO refused (428 phone_app_unknown, not a warning-and-proceed) — document support shipped strictly after version reporting did, so “unknown” is proof the installed build predates it, not genuine ambiguity.
Authorizations
Opaque bearer token created on your paired Android phone. The format is rfk_live_ followed by 32 URL-safe alphanumeric characters (≥160 bits of entropy). Test tokens use the rfk_test_ prefix.
Body
Destination filename, written into the phone's Downloads folder. Must end in an allowed plain-text/code extension (never .html/.svg — those render and execute if tapped) and be at most 120 characters after sanitization (rejected outright above 4096 raw characters). Path separators, control characters, and leading dots are stripped server-side and again on the phone before writing.
"runbook.md"
UTF-8 text content of the file. Non-empty, at most 131072 bytes.
"# Runbook\n\n1. Check the dashboard\n2. Page on-call if red\n"
Response
Created — the document was encrypted and dispatched to the phone.
Document id (doc_ prefix). The paired phone pulls the encrypted content with it via the FCM-nudged GET /v1/documents/{documentId} pull, never carried inline.
"doc_3f6e2a7c9b1d4f8e8a5b6c1d2e3f4a5b"
UTF-8 byte length of the content that was sent.
128