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.

StepWhat it's for
ChaptersThe audio. Import a whole book, or upload a file per chapter — up to 5 GB per title, reorderable, uploaded in parts so nothing stalls.
DetailsTitle, author, narrator, description, series, year, genre, ISBN, language and player colours.
CoverThe artwork on the player, the paywall and every link preview.
EbookThe companion EPUB or PDF, and its read-along sync.
AccessPublic, or gated behind an access link. This one decides what comes next.
Free sampleA 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.
RegionsLimit the title to the countries you hold rights in.
PublishHosting — 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 uploadWhat Storia pulls outYou 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.
An M4B chaptered into very long parts (over ~192 MB per chapter) is imported as a single file rather than split, to keep your browser from running out of memory. Chapter marks in other formats — MP3, OGG, FLAC, WAV — aren't read; those upload as one file per chapter.
"Convert for streaming". In an MP4 (.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.
Everything stays editable. Publishing doesn't lock anything: you can add, replace, remove, reorder and re-time chapters on a live title, and edit details, cover, sample and the accompanying ebook, whenever you like. Changes take effect immediately for listeners, and the canonical 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.
Certifying your rights. Before a title goes live you'll be asked to confirm, for that title, that you hold the rights to publish and distribute it — the audio, the cover, and any accompanying ebook. We record when you did and what you agreed to.

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)

  1. Create a hosted payment link/product in your processor (Polar, Stripe, Square, Lemon Squeezy, or Paddle).
  2. Add the webhook URL shown in the console to your processor and paste its signing secret back into Storia.
  3. 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.
  4. 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.

ProcessorLink modeYou provide
Polar, Stripe, Square, Lemon Squeezy, PaddleYes (default)Payment link + webhook secret
PayPalNo (API mode)Client ID, secret, webhook ID
Your credentials are stored per title and never shown again after you save them. Storia only listens for the payment — it never holds your money.

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).
  • idoptional: the id attribute 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 (end equal to the next start) 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.

The reader won't highlight a wall of text. A cue covering more than about a sentence's worth of words is used for position but not marked up — painting a whole chapter reads as a bug, not as "you are here". Listeners can also turn highlighting off entirely from the reader; the position sync keeps working either way.

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.

Open the console →