Documentation
Everything you need to publish, gate, and sell your audiobooks and audio courses on Storia.
Getting started
Storia is passwordless. Open the publisher console, enter your email, and click the magic link we send you — that signs you in and creates your account in one step. Sessions last 60 days per device. The first time, you'll accept the Terms of Service before you can publish.
Creating & publishing a title
Start from the dashboard. Name the title and hit Create, or — if you already have a
finished file — drop the M4B, EPUB or .lpf straight onto the box. Importing
creates the title, splits it into chapters and fills in the details, cover and metadata
before you have typed anything. See Importing for what each format
gives you.
Then you're in the wizard, one step at a time, with tabs across the top so you can jump back to anything later. Each step saves as you leave it — there's no separate Save button to forget, and no way to lose a step's work by clicking onward.
| Step | What it's for |
|---|---|
| Chapters | The audio. Import a whole book, or upload a file per chapter — up to 5 GB per title, reorderable, uploaded in parts so nothing stalls. |
| Details | Title, author, narrator, description, series, year, genre, ISBN, language and player colours. |
| Cover | The artwork on the player, the paywall and every link preview. |
| Ebook | The companion EPUB or PDF, and its read-along sync. |
| Access | Public, or gated behind an access link. This one decides what comes next. |
| Free sample | A short clip for the paywall, Discover and collection pages. |
| Payment (private titles only) | Connect your own processor so buyers pay you directly. |
| Sharing (private titles only) | Hand out access yourself with single-use links. |
| Regions | Limit the title to the countries you hold rights in. |
| Publish | Hosting — a flat $25 for 10 years per title, the only fee Storia charges you — the rights affirmation, and going live at /p/your-slug. |
Optional steps can be skipped, and skipping means exactly that: nothing is written, and you can come back to the tab whenever you like. The flow adapts to your answers — a public title never shows you Payment or Sharing at all, because it has no paywall for them to configure. Tick "Private" in the Access step and both appear right after it.
Importing a finished book
Importing happens in your browser — the file is opened, read and split on your own machine, and only the finished pieces are uploaded. Nothing is re-encoded, so the audio that reaches your listeners is bit-for-bit what you made. Three formats:
| You upload | What Storia pulls out | You still supply |
|---|---|---|
M4B (or a chaptered .m4a/.mp4) |
Every chapter as its own file, with its title and timing, plus cover art, author, narrator, description, year, genre and series. | The companion ebook and, if you want read-along, a sync file. |
| EPUB | Metadata and cover. If the book has Media Overlays (EPUB 3 read-along), also the narration audio as one chapter per file and the read-along sync file, generated from the book's SMIL. | Nothing — the EPUB itself is kept as the companion ebook, rewritten without the audio so it stays small. |
| LPF (W3C Audiobooks package) | Every chapter in reading order, the cover, title, author, narrator and language from the manifest, plus the ebook and sync file if the package carries them. | Nothing. |
.m4a/.m4b)
the index can sit at the end of the file, which forces a player to fetch the whole thing
before it can start — so those show as download-only. Chapters we split for you are
written index-first and never need this; it only comes up for MP4s you upload yourself, and
big ones at that, since we quietly fix the small ones on upload. Hit the button on the file
and we move the index to the front: the audio is copied untouched, nothing is re-encoded,
and the running time doesn't change.publication.json (the W3C Audiobooks / LPF manifest)
is rewritten to match. It's your book — fix a typo, swap a bad take, add a bonus chapter.The companion ebook (optional). A title carries one accompanying text: an EPUB or a PDF. Listeners can read it in the built-in reader and download it. For an EPUB you can also attach a read-along sync file so the reader highlights each phrase as it's narrated — imports that can produce one attach it for you. Replace or remove either at any time.
Preview before you publish. While you're signed in, you can open your own title's
player at /p/<slug> and play everything — even an unpublished draft or a gated
title — without a device token or purchase. Only you (the owner) see it; everyone else still
needs it published and, for gated titles, an access link.
Free sample (optional). Each title can carry a short audio sample that plays on its paywall before purchase. We try to extract one automatically from your first file during upload; you can also upload or replace it from the console, or remove it. The sample is served openly (even for a gated title), so listeners can try before they buy.
Get discovered (optional). Tick "List in the public catalogue" on a published title and it appears on Discover, where listeners who like the Storia experience can find more content. It's off by default — your title stays unlisted until you opt in.
Public vs. gated access
Each title is either public (anyone with the link can listen) or gated (a listener needs an access link). Gated titles show a paywall page — deliberately not a PWA, so a browser never offers to install an app behind a paywall — with your cover, description, a buy option, and a contact email for lost-access recovery.
Selling access with your own processor
Connect your own payment account so buyers pay you directly — no funds pass through Storia, and there's no revenue share. On a confirmed payment we mint a single-use access link and deliver it to the buyer.
Link mode (recommended — no API key)
- Create a hosted payment link/product in your processor (Polar, Stripe, Square, Lemon Squeezy, or Paddle).
- Add the webhook URL shown in the console to your processor and paste its signing secret back into Storia.
- Selling more than one book? With Polar you can point every title at one webhook instead of creating a new one each time. Choose “Reuse my Polar webhook for all my titles” and Storia shows a single endpoint URL for your whole catalogue; the signing secret carries over, so you only paste it once. Each title then needs its Product ID, which is how an incoming order is matched to the right book.
- Paste your payment link and set a price. That's it — buyers go to your checkout and get their access link by email after paying.
Instant unlock (optional). Set your payment link's success / redirect URL to the claim URL shown in the console. Most processors (Polar, Stripe, Lemon Squeezy, Paddle, Square) append their order/checkout id when they send the buyer back, and Storia uses it to unlock the device immediately — no need to open the email. If a processor doesn't redirect, the emailed link still works.
API mode (seamless redirect)
Provide your processor's API key and Storia creates each checkout itself, so buyers are redirected straight back into the player after paying. PayPal uses this mode.
| Processor | Link mode | You provide |
|---|---|---|
| Polar, Stripe, Square, Lemon Squeezy, Paddle | Yes (default) | Payment link + webhook secret |
| PayPal | No (API mode) | Client ID, secret, webhook ID |
Combined "choose your edition" pages (optional)
From the console you can group several of your titles into a collection — one
shareable page at /c/your-slug that lets a buyer choose between them. Each title
shows its own free sample and links to its own separate checkout, so this is ideal for variants
(different narrators, languages, or editions) without merging them into one publication. Your
titles stay completely independent; only published ones appear on the page.
Drafts don't last forever
An unpublished draft is deleted after 90 days without a change. Any edit restarts the clock, and publishing stops it for good — so this only ever catches something genuinely abandoned. You get two emails first: one when a draft enters its last couple of weeks, and a final notice a few days before the date. The console shows the date on the title itself once it is close.
You can keep 10 unpublished drafts at a time. Publish one or delete one to start another. Published titles never expire and don't count against the limit — you paid to host them.
Sharing & device tokens
Access to a gated title is a device token (stored on the listener's device), handed out by a single-use share link. What you set is allowed active devices: how many devices one access link can be listening on.
Listeners can share their link as often as they like — sharing is never rationed, and never runs out. What is bounded is how many of their devices are active at once: opening the link on a new device signs out whichever of theirs has gone longest without listening. So a family shares one link freely and simply can't listen on more devices than you allowed. Each link you hand out gets its own set of devices, so one buyer never eats another's.
The same number caps how many unclaimed links one listener can have waiting at once — a pending link is a device waiting to happen. They can still always share: the oldest unclaimed link is retired to make room, the way the idlest device is. Revoke any token anytime from the console.
Where a title can be heard
Audio rights are usually territorial, so each title can be limited to the countries you hold rights in — or made available everywhere except a few. Set it under Where it can be heard in the console: choose the restriction, pick the countries, save.
Listeners outside the allowed set get a short page explaining that the publisher hasn't made the title available in their region (with your contact email, if you've set one) rather than a dead end or a "not found". The restriction covers the player, the audio itself, the ebook and the paywall — there's no point selling access we won't deliver. You, as the owner, can always reach your own title from anywhere, so you can check it while travelling.
Location comes from the network edge, and listeners whose country can't be determined are let through rather than locked out. Treat it as a good-faith boundary that satisfies a rights obligation, not as a lock: anyone using a VPN can route around it.
What listeners get
- An installable, offline player — download once, listen anywhere, no account.
- Resume across devices — optional cloud progress sync within their access tree.
- A built-in ebook reader — add the companion EPUB and listeners can read it in-app, full screen: table of contents, light/sepia/night themes, text size, typeface, line spacing and width, scrolling or page-turning, and a saved position. A companion PDF opens in the app too.
- Read-along — when the title has timings (a sync file, or Media Overlays inside the EPUB itself, the format Apple Books uses) the reader marks each word as it's narrated and turns the page to keep up. Tapping a word moves the narration to it.
- Reading and listening are one activity — opening the text doesn't stop the voice; the reader follows the narration already playing. Put the book down mid-page and press play, and it continues from the sentence you stopped reading — on any of your devices. Without a sync file there's nothing exact to say, so switching surfaces offers an opt-in jump to the matching chapter, labelled an estimate.
- A free sample — for gated titles, hear a short preview on the paywall before buying.
- Reviews — leave a rating and a few words on the title.
Read-along sync file
The sync file keeps the ebook and the narration in step. Its real job is position: a listener who switches between reading and listening lands where they left off, in the right place, rather than at an estimate. Where the timings are fine enough, the reader also highlights the phrase being spoken — but that's the garnish, not the point, and listeners can switch it off.
Storia gets that alignment in one of four ways:
- EPUB with Media Overlays — importing one generates the sync file for you from the book's SMIL overlays, at whatever granularity the book was authored in. Nothing to do.
- LPF package — the sync file travels inside the package as a resource.
- You upload one — if you have word-level timings from your production process, the format is below.
- Generated from your chapters — almost nobody producing an M4B has word-level timings, so the console offers to build a chapter-level sync instead: it matches each section of your ebook to the chapter that narrates it and gives it one cue spanning that chapter. Nothing highlights at this granularity — there's no phrase to point at — but switching between reading and listening becomes exact rather than estimated. One click under Read-along sync, and you can replace it later with a finer file.
Whichever way it arrives, the sync file is what the reader plays against: its cues point at the title's own chapter audio, so read-along keeps working after you edit, replace or re-time a chapter. (An EPUB you upload straight into the ebook slot with its overlays and audio still inside is read-along too — the reader falls back to those.)
The format is plain JSON. Times are in seconds, relative to the start of the
track they reference — not to the whole book — and track is a
1-based position in the reading order:
{
"type": "storia-sync",
"version": 1,
"sections": [
{
"href": "OEBPS/ch01.xhtml",
"track": 1,
"cues": [
{ "id": "w1", "start": 0, "end": 0.42 },
{ "id": "w2", "start": 0.42, "end": 0.98 }
]
}
]
}
href— the spine document inside your EPUB. Matched on the full path, falling back to the filename, so either works.track— which chapter's audio these cues belong to (1 = first chapter in the reading order).id— optional: theidattribute of the element to highlight in that document. Leave it out and the cue still places that stretch of audio in that document — which is all a chapter-level file can honestly say, and is enough to keep the two media in step. A generated chapter-level file looks like{ "start": 0, "end": 930.5 }.start/end— seconds into that chapter's audio. Cues must be in order and must not overlap; touching (endequal to the nextstart) is fine.text— optional, ignored by the player. Handy when authoring by hand.
Granularity is up to you: one cue per word gives a karaoke effect, one per sentence or paragraph is calmer and makes a much smaller file. Anything malformed is rejected on upload with the specific problem, so you can fix it and try again.
FAQ
Does Storia take a cut of my sales?
No. You only pay the flat hosting fee. Sales go to your own processor (you pay only its fees).
Do my buyers need an account?
No. Access is a device token delivered by link or email — no sign-up.
Can I move my files later?
Yes — you upload your own files and can download or delete them anytime.
Do I need to convert my M4B before uploading it?
No. Storia reads and splits it in your browser and copies the audio frames across untouched — no re-encoding, so nothing is lost and there's nothing to install.
Does my whole M4B get uploaded?
No. Only the chapters it's split into are uploaded, which is the same audio without the original's container overhead. Reading the file to find the chapters happens on your machine and doesn't upload anything.