[Enhancement] Add “Audible Series ID/ASIN” field to Series metadata #3162

Open
opened 2026-04-25 00:14:00 +02:00 by adam · 2 comments
Owner

Originally created by @H2OKing89 on GitHub (Dec 26, 2025).

Type of Enhancement

Server Backend

Describe the Feature/Enhancement

Feature request: Store Audible Series ASIN (Series URL / ID) on Series

Problem / Motivation

Audiobookshelf lets us rename a Series to whatever we want (which is great), but once we do that there’s no “hard link” back to the original Audible Series page.

For books, we already commonly rely on ASINs as stable identifiers for matching and automation. But Series are currently just a name + description conceptually, which means:

  • Two different Audible series can share the same (or very similar) name.
  • Users may rename series (ex: add “(Unabridged)” or reorder text) and lose the ability to map back to the canonical series on Audible.
  • External tooling and metadata workflows can’t reliably “round-trip” between ABS ↔ Audible for series-level logic.

Right now, the series object is essentially:

…and PATCH /api/series/<id> only accepts name and description Audiobookshelf API, so there’s no place to store a provider ID.


Concrete example (why I want this)

Audiobook ASIN URL (for a specific volume):

Mushoku Tensei vol_01
https://www.audible.com/pd/B0CJWTXLPJ

Audible Series URL (for the whole series page):

Mushoku Tensei: Jobless Reincarnation
https://www.audible.com/series/B0CJYVSQFB

In ABS I might name the series as:

  • Mushoku Tensei
  • Mushoku Tensei (English)
  • Mushoku Tensei: Jobless Reincarnation (Unabridged)
  • etc.

But I’d still love to preserve the canonical Audible series ID (B0CJYVSQFB) so the series can always be mapped back to Audible even if I rename it.


Proposed solution (minimal + future-proof)

Add an optional field to Series for Audible mapping, something like:

  • audibleSeriesAsin: string | null

    • Example: "B0CJYVSQFB"
  • optionally (nice-to-have):

    • audibleSeriesUrl: string | null (derived from the ASIN + region/domain)

    • OR a more generic structure like:

      • externalIds: { [provider: string]: string }
      • example: externalIds: { "audible.com": "B0CJYVSQFB" }

Why I like the generic externalIds idea

Even if the first use-case is Audible, it avoids painting ABS into a corner later if you want to store IDs for other providers.


API/Backend changes (what I’m hoping for)

  1. Series model includes the new field(s) in responses (GET /api/series/<id>).

  2. Update Series endpoint supports setting/clearing it (PATCH /api/series/<id>).

  3. Optional but awesome: series matching similar to author matching:

    • Example concept: POST /api/series/<id>/match that can fill description/image/etc from Audible once it has the series ASIN.
    • (Not required for this request—just calling out that storing the ID enables this later.)

Edge cases / notes

  • Audible has multiple regions/domains (audible.com, .co.uk, .de, etc.).
    If the ID differs by region (not sure), storing either:

    • a provider key that includes domain (ex: audible.com) or
    • a separate audibleRegion field
      would keep this unambiguous.
  • If the ID is globally stable across regions, then storing just the ID is still useful, and the UI could use the library’s preferred provider domain for the link.

Why would this be helpful?

Why this helps (practical benefits)

For ABS itself

  • More reliable matching / de-duplication when series names collide
  • Enables better “refresh metadata” or future “match series” flows
  • Makes series objects less “stringly-typed” and more stable

For power users / automation

  • External scripts can map ABS series → Audible series reliably
  • Easier auditing, metadata syncing, and “toolbox” workflows
  • Series-level features become more possible (series cover art, series description refresh, etc.)

Future Implementation (Screenshot)

UI/UX idea (simple)

On the Series edit screen/modal:

  • New field: Audible Series ASIN / URL

    • Accept either:

      • B0CJYVSQFB
      • or a full URL like https://www.audible.com/series/B0CJYVSQFB
    • If a URL is pasted, auto-extract the ID.

  • If present, show a clickable “Open on Audible” link/button.

(Zero impact for users who don’t care—field can be hidden unless “advanced” is enabled, or just optional.)

Audiobookshelf Server Version

v2.32.1 docker

Current Implementation (Screenshot)

Image
Originally created by @H2OKing89 on GitHub (Dec 26, 2025). ### Type of Enhancement Server Backend ### Describe the Feature/Enhancement ## Feature request: Store Audible Series ASIN (Series URL / ID) on Series **Problem / Motivation** Audiobookshelf lets us rename a Series to whatever we want (which is great), but once we do that there’s no “hard link” back to the original Audible Series page. For **books**, we already commonly rely on ASINs as stable identifiers for matching and automation. But **Series** are currently just a name + description conceptually, which means: * Two different Audible series can share the same (or very similar) name. * Users may rename series (ex: add “(Unabridged)” or reorder text) and lose the ability to map back to the canonical series on Audible. * External tooling and metadata workflows can’t reliably “round-trip” between ABS ↔ Audible for series-level logic. Right now, the series object is essentially: * `id` * `name` * `description` * timestamps (`addedAt`, `updatedAt`) [Audiobookshelf API](https://api.audiobookshelf.org/) …and `PATCH /api/series/<id>` only accepts `name` and `description` [Audiobookshelf API](https://api.audiobookshelf.org/), so there’s no place to store a provider ID. --- ### Concrete example (why I want this) **Audiobook ASIN URL** (for a specific volume): ```text Mushoku Tensei vol_01 https://www.audible.com/pd/B0CJWTXLPJ ``` **Audible Series URL** (for the whole series page): ```text Mushoku Tensei: Jobless Reincarnation https://www.audible.com/series/B0CJYVSQFB ``` In ABS I might name the series as: * `Mushoku Tensei` * `Mushoku Tensei (English)` * `Mushoku Tensei: Jobless Reincarnation (Unabridged)` * etc. But I’d still love to preserve **the canonical Audible series ID** (`B0CJYVSQFB`) so the series can always be mapped back to Audible even if I rename it. --- ### Proposed solution (minimal + future-proof) Add an optional field to **Series** for Audible mapping, something like: * `audibleSeriesAsin: string | null` * Example: `"B0CJYVSQFB"` * optionally (nice-to-have): * `audibleSeriesUrl: string | null` (derived from the ASIN + region/domain) * OR a more generic structure like: * `externalIds: { [provider: string]: string }` * example: `externalIds: { "audible.com": "B0CJYVSQFB" }` #### Why I like the generic `externalIds` idea Even if the first use-case is Audible, it avoids painting ABS into a corner later if you want to store IDs for other providers. --- ### API/Backend changes (what I’m hoping for) 1. **Series model** includes the new field(s) in responses (`GET /api/series/<id>`). 2. **Update Series** endpoint supports setting/clearing it (`PATCH /api/series/<id>`). * Today the docs show only `name` / `description` are supported [Audiobookshelf API](https://api.audiobookshelf.org/). 3. Optional but awesome: **series matching** similar to author matching: * Example concept: `POST /api/series/<id>/match` that can fill description/image/etc from Audible once it has the series ASIN. * (Not required for this request—just calling out that storing the ID enables this later.) --- ### Edge cases / notes * Audible has multiple regions/domains (`audible.com`, `.co.uk`, `.de`, etc.). If the ID differs by region (not sure), storing either: * a provider key that includes domain (ex: `audible.com`) **or** * a separate `audibleRegion` field would keep this unambiguous. * If the ID is globally stable across regions, then storing just the ID is still useful, and the UI could use the library’s preferred provider domain for the link. ### Why would this be helpful? ## Why this helps (practical benefits) **For ABS itself** * More reliable matching / de-duplication when series names collide * Enables better “refresh metadata” or future “match series” flows * Makes series objects less “stringly-typed” and more stable **For power users / automation** * External scripts can map ABS series → Audible series reliably * Easier auditing, metadata syncing, and “toolbox” workflows * Series-level features become more possible (series cover art, series description refresh, etc.) ### Future Implementation (Screenshot) ## UI/UX idea (simple) On the **Series edit** screen/modal: * New field: **Audible Series ASIN / URL** * Accept either: * `B0CJYVSQFB` * or a full URL like `https://www.audible.com/series/B0CJYVSQFB` * If a URL is pasted, auto-extract the ID. * If present, show a clickable “Open on Audible” link/button. (Zero impact for users who don’t care—field can be hidden unless “advanced” is enabled, or just optional.) ### Audiobookshelf Server Version v2.32.1 docker ### Current Implementation (Screenshot) <img width="1080" height="946" alt="Image" src="https://github.com/user-attachments/assets/94e4ed96-17c6-4052-8dcd-c33e3dc7ba2d" />
adam added the enhancement label 2026-04-25 00:14:00 +02:00
Author
Owner

@iconoclasthero commented on GitHub (Jan 4, 2026):

I just want to be able to edit the series name... I have yet to fathom why that's a locked field.

@iconoclasthero commented on GitHub (Jan 4, 2026): I just want to be able to edit the series name... I have yet to fathom why that's a locked field.
Author
Owner

@Vito0912 commented on GitHub (Jan 4, 2026):

Ik, not that helpful, but I have a tool for renaming series: https://abstoolbox.vito0912.de/tools

For the reason why it is the case: Probably because this would affect many books in a book dialogue. Similar how you cannot rename a genre or tag, but you can via the setting. But dunno

@Vito0912 commented on GitHub (Jan 4, 2026): Ik, not that helpful, but I have a tool for renaming series: <https://abstoolbox.vito0912.de/tools> For the reason why it is the case: Probably because this would affect many books in a book dialogue. Similar how you cannot rename a genre or tag, but you can via the setting. But dunno
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#3162