send-to-kindle
Use when getting a document onto an Amazon Kindle — which delivery routes still work, what format to produce, and why a delivery can silently fail. Kindle-only; nothing here applies to Kobo, reMarkabl
SKILL.mdskills/send-to-kindle/SKILL.md
GitHubsend-to-kindle
Delivering a document to a Kindle. Covers what to produce, how it gets there, and the two failure modes that give no error message.
Producing the file is the pandoc skill's job —
scripts/md2kindle-epub.sh turns markdown into a suitable EPUB. This skill
starts at "the file exists".
Everything below is service behaviour, and it moves. Between 2022 and 2026 Amazon stopped accepting MOBI, started accepting EPUB, killed USB download of purchased books, and retired Word's Send-to-Kindle button. Statuses here are as of 2026-08; re-verify before relying on a dated claim.
Produce EPUB, not PDF
| EPUB | Reflowable — text re-wraps to the reader's font size and margins. Kindles do not render EPUB natively; Send-to-Kindle converts it server-side into the device's own format (KFX/AZW3) on delivery, which is what buys reflow, resizable type, and a native TOC. Free, no local tooling. |
| Fixed-layout. A PDF page is a fixed canvas — on a 6" screen it either shrinks to illegible or needs constant pan/zoom. Right for print, wrong for reading. An A5 print booklet is roughly 60% wider than a Paperwhite's visible area. | |
| MOBI / AZW | Not accepted as input since August 2022. Don't reach for an old MOBI recipe. |
| AZW3 (locally converted) | Only needed for the USB path — see below. |
Delivery routes (status as of 2026-08)
| Route | Status | Notes |
|---|---|---|
Send-to-Kindle email (…@kindle.com) |
Works | The default. Wireless, works over a phone hotspot. See the three facts below |
| Web upload (sendtokindle.com, drag-and-drop) | Works | Manual, but no sender allowlist to trip over |
| Kindle mobile app → "Import file" | Works | Only useful if the reader reads on the phone |
USB sideload into documents/ |
Works | A raw .epub copied over USB is not indexed by the Kindle library — convert to AZW3 locally first (e.g. Calibre). Email delivery gets that conversion for free. Unaffected by the 2025 removal of USB download for purchased Kindle Store books, which is a different thing |
| Send to Kindle desktop app | Being retired | Kindle for PC and the Windows desktop app shut down 2026-06-30. Email and web upload do not depend on it |
| Send to Kindle from Microsoft Word | Retired 2026-02-09 | The button is gone; web upload is unaffected |
| Wireless delivery to older hardware | Cut off for pre-2013 devices | The May-2026 cutoff hit Paperwhite 1 and older only. 2018-era hardware and newer keep full wireless delivery |
Sending by email — three facts
- Send the file as an email attachment to the reader's Send-to-Kindle address. Nothing else in the message matters.
- Addresses are per device, not per account. An account with several registered Kindles has a separate ingress address for each, so delivery is granular. Amazon-facing device names are user-set and can be misleading — pick the target by a stable identifier (the address itself, or the device serial), never by display name.
- The sender address must be pre-approved on the account's Approved Personal Document E-mail List. Mail from an unapproved sender is dropped silently — no bounce, no error, no delivery. This is the single most likely cause of "I sent it and nothing arrived".
The allowlist is separate from the ingress address; both live under Manage Your Content and Devices → Preferences → Personal Document Settings.
Confirming delivery — sending is not delivering
Ingress validation is asynchronous. Amazon accepts the SMTP transaction, then validates the document afterwards and reports failure by email. Everything observable at send time therefore proves only that the mail left, not that it arrived:
| What you checked | What it actually proves |
|---|---|
| The mail client reported "sent" | The message was queued |
| The outbox drained to 0 | The SMTP handoff to your provider succeeded |
| The subject is at the top of the sent mailbox | Same as above — your provider took it |
| No bounce after a few minutes | Amazon accepted it. The only real signal |
Scripted senders make this worse: an AppleScript send returns as soon as the
message is queued, so a script that checks immediately after will always
report success. Nothing about a queued message predicts what Amazon does with
it two minutes later.
So: wait, then check for a bounce. Observed bounce latency is ~30–60 seconds. Waiting ~2–3 minutes and finding no bounce naming your filename is the verification. Anything faster is checking the wrong thing.
E999 — Send to Kindle Internal Error
Amazon's generic rejection. The wording names no defect and reads as transient, which is the trap: it is frequently a real, findable spec violation in your file.
Run epubcheck before theorising. It settles in seconds what the error
message actively obscures.
Worked example, 2026-08-08 — one sender, one morning, all EPUBs from the same
generator. The file that bounced twice, 3.5 hours apart, was the only one in
the batch missing dc:title, a required element of the EPUB package
metadata. Every file that carried a dc:title was accepted. The generator had
made the title optional, so omitting one flag silently produced a spec-invalid
book.
Two things that make this hard to see without the validator:
- Errors alone do not predict rejection. Accepted files in the same batch
failed
epubchecktoo — broken internal links, undefined fragment identifiers. Amazon tolerated all of it. What it would not tolerate was the missing required element. Triage by severity and by REQUIRED-ness, not by error count. - Surface plausibility misleads. The twice-failing file was the smallest and
structurally simplest of the batch (36 KB vs 60 KB) and passed
unzip -tcleanly. Nothing about it looked wrong.
So on E999:
epubcheck the-file.epub- Fix any violation of a required element (
dc:title,dc:identifier,dc:language) and rebuild. - Resend. Note that re-attaching the byte-identical file is the one thing observed never to work — it bounced again in 16 seconds — which makes sense once you know the defect travels with the file.
- Only if a validator-clean build fails repeatedly should you treat it as genuinely transient on Amazon's side.
The two silences are different
Both look like "nothing arrived", and they need opposite responses:
- No bounce, no delivery → an allowlist problem (see above). Amazon drops unapproved senders without a word.
- A bounce → the sender is approved; the message reached Amazon and was rejected downstream. Validate the file (above) rather than simply retrying.
A bounce is therefore mildly good news about your configuration. Once any document from a given sender has arrived, "no bounce" reliably means delivered for that sender.
Size ceilings
| Route | Ceiling |
|---|---|
| Email attachment | ~50 MB — widely-circulated community figure, not confirmed against an official Amazon page. Verify on the Personal Document Settings page if it matters |
| Web upload | ~200 MB, same caveat |
Text documents will not come near either. A document bundling archived source captures plausibly could.
Highlights only come back one way
Anything delivered via Send-to-Kindle is a personal document, not a Kindle Store purchase, and Amazon's cloud highlight ecosystem is structurally closed to it:
| Route | Covers personal documents? |
|---|---|
documents/My Clippings.txt on the device |
Yes — the only route. Plain text, trivially parseable, but retrieval requires physically connecting the device over USB. No wireless path exists for this file |
read.amazon.com/notebook (web Notebook) |
No — Kindle Store purchases only |
| Per-book "Export Notes and Highlights" | No — same scope, and manual anyway |
| Readwise | No — its docs explicitly exclude files sent via Send-to-Kindle |
So the USB cable is not a convenience fallback here; it is the only mechanism. Plan around a manual step, or do not promise highlight round-tripping.
Common Mistakes
| Symptom | Cause | Fix |
|---|---|---|
| Sent it, nothing arrived, no bounce | Sender not on the approved list | Add the exact sending address under Personal Document Settings |
Sent it, nothing arrived, got E999 - Send to Kindle Internal Error |
Amazon's generic rejection. Often a real spec violation the message doesn't name — observed cause: a missing dc:title |
Run epubcheck. Fix any REQUIRED-element violation, rebuild, resend. Re-attaching the identical file never works |
| A script reported the send succeeded, but it never arrived | The script checked the outbox, which only proves SMTP handoff. Ingress validation happens later and reports by email | Wait ~2–3 min after sending, then check for a bounce naming the file. Absence of a bounce is the verification |
| Arrived on the wrong person's Kindle | Targeted by device display name | Target by ingress address or serial; names are user-set and often stale |
| Reader has to pan and zoom every page | A PDF was sent | Send EPUB and let Send-to-Kindle convert it |
Copied an .epub over USB, it never appears in the library |
Raw EPUB isn't indexed on-device | Convert to AZW3 locally, or use email delivery instead |
| Checkboxes render as blank gaps | Task-list HTML <input> elements were emitted |
See the pandoc skill — build the EPUB with task_lists disabled |
EPUB built fine, epubcheck shows errors, but it still delivers |
Not all validation errors matter to Amazon — broken links and undefined fragment identifiers were tolerated | Triage by REQUIRED-ness, not error count. Fix required-element violations first; treat the rest as quality issues |
| Waiting for highlights to sync | Personal documents never reach the cloud | USB + My Clippings.txt, or nothing |
What this skill deliberately does not do
- It does not send anything. No sender script, no AppleScript, no SMTP helper, and no configuration contract for one. The send step is the three facts above, performed by a human in a mail client.
- It carries no addresses. Ingress addresses, approved senders, device serials, and keychain account names are personal values that belong in the operator's own private workspace, never in a published skill.