Skip to content

Titles

Endpoints for browsing comic book titles (franchises/properties).

A title represents a franchise (e.g., "Batman"), which may have multiple series under it.

Get a specific title

GET/api/v1/titles/{title_id}
Requires a token

Returns: id, name, slug, start_year, end_year, status, type, image_url, content_rating_label, min_age, is_nsfw, imprint_id, series_count, issues_count, average_rating, aliases

Use relationship endpoints for richer data:

  • /titles/{id}/series - Get series in a title
  • /titles/{id}/issues - Get issues across all series in a title
  • /titles/{id}/creators - Get creators credited on the title
  • /titles/{id}/characters - Get characters associated with the title
  • /titles/{id}/teams - Get teams associated with the title

Path parameters

title_idintegerrequired

The ID of the title.

Example: 7

Query parameters

languagesstring

Keep only these languages in the _i18n maps (comma-separated BCP 47 tags). No other field changes.

Example: "ja,ko"

Responses

200

Success

Headers: X-RateLimit-Limit, X-RateLimit-Remaining

dataobjectrequired
data.idintegerrequired

Example: 12

data.namestring or nullrequired

Example: "Batman"

data.slugstring or nullrequired

Example: "batman"

data.start_yearinteger or nullrequired

Example: 1939

data.end_yearinteger or nullrequired

Example: 2011

data.statusstring or nullrequired

Example: "ongoing"

data.typestring or nullrequired

Example: "Series"

data.image_urlstring or nullrequired

Example: "https://...-cover_md.webp"

data.imagesobject or nullrequired
data.images.cover_smstring

Example: "https://...-cover_sm.webp"

data.images.cover_mdstring

Example: "https://...-cover_md.webp"

data.images.cover_lgstring

Example: "https://...-cover_lg.webp"

data.content_rating_labelstring or nullrequired

Example: "15+"

data.min_ageinteger or nullrequired

Example: 15

data.is_nsfwboolean or nullrequired
data.imprint_idinteger or nullrequired

Example: 3

data.series_countinteger or nullrequired

Example: 25

data.issues_countinteger or nullrequired

Example: 1450

data.average_ratingstring or nullrequired

Example: "4.30"

data.aliasesstring or number or boolean or array or object or nullrequired

The other names, as stored: a list of strings in production.

Example: ["The Dark Knight"]

data.name_i18nobjectrequired

One name per language, keyed by BCP 47 tag.

data.aliases_i18nobjectrequired

Alternative names per language.

data.original_localestring or nullrequired

The language the title is from, a BCP 47 tag.

Example: "en"

401

Unauthenticated. The bearer token is missing, invalid, or revoked.

messagestringrequired

Example: "Unauthenticated."

Example body, from the documented examples

{
  "message": "Unauthenticated."
}
403

The token lacks the read:public ability.

messagestringrequired

Example: "Insufficient token scope."

Example body, from the documented examples

{
  "message": "Insufficient token scope."
}
404

Not Found

messagestringrequired

Example: "No query results for model [App\\Models\\Title] 12"

Example body, from the documented examples

{
  "message": "No query results for model [App\\Models\\Title] 12"
}
429

Rate limit exceeded. This endpoint allows 300/hour (free) or 1,000/hour (PRO). Wait for the number of seconds in the Retry-After header before retrying.

Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining

messagestringrequired

Example: "Too Many Attempts."

Example body, from the documented examples

{
  "message": "Too Many Attempts."
}

Example request

curl --request GET \
  'https://versedb.com/api/v1/titles/7' \
  --header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
  --header 'Accept: application/json'

Example response 200

{
  "data": {
    "id": 12,
    "name": "Batman",
    "slug": "batman",
    "start_year": 1939,
    "end_year": 2011,
    "status": "ongoing",
    "type": "Series",
    "image_url": "https://...-cover_md.webp",
    "images": {
      "cover_sm": "https://...-cover_sm.webp",
      "cover_md": "https://...-cover_md.webp",
      "cover_lg": "https://...-cover_lg.webp"
    },
    "content_rating_label": "15+",
    "min_age": 15,
    "imprint_id": 3,
    "series_count": 25,
    "issues_count": 1450,
    "average_rating": "4.30",
    "aliases": [
      "The Dark Knight"
    ],
    "name_i18n": {
      "ja": {
        "value": "講談社",
        "reading": "こうだんしゃ",
        "source": "madb"
      }
    },
    "aliases_i18n": {
      "en": [
        "Kodansha Comics"
      ]
    },
    "original_locale": "en"
  }
}

List titles

GET/api/v1/titles
Requires a token

Returns: id, name, slug, start_year, end_year, status, type, image_url, content_rating_label, min_age, is_nsfw, series_count, issues_count, average_rating, total_reviews

Query parameters

qstring

Search by title name.

Example: "spider-man"

publisher_idinteger

Filter by publisher ID.

Example: 1

publisherinteger

Deprecated alias for publisher_id, kept for existing callers.

Example: 1

publisher_idsstring

Comma-separated publisher IDs. Returns a title published by any one of them.

Example: "1,4"

hide_unreleasedboolean

Return only titles whose start year has already arrived.

Example: true

mediumstring

Return titles with a series in this medium: comic, manga, manhwa, manhua, bande_dessinee or magazine.

Example: "manga"

languagesstring

Comma-separated language codes. Returns titles with a series in any one of them.

Example: "en,ja"

ongoingboolean

Return only titles with an ongoing series. Combined with medium or languages, that same series has to match them.

Example: true

sortstring

Sort field. One of name, start_year, average_rating, cached_series_count, cached_issues_count; anything else falls back to name. Passing sort replaces the relevance ordering applied to q results.

Example: "start_year"

directionstring

Sort direction, asc or desc. Anything else falls back to asc.

Example: "desc"

limitinteger

Number of results per page (max 50).

Example: 20

pageinteger

Page number; meta.last_page says where the list ends.

Example: 1

Responses

200

Success

Headers: X-RateLimit-Limit, X-RateLimit-Remaining

dataarray of objectsrequired
data[].idintegerrequired

Example: 12

data[].namestring or nullrequired

Example: "Batman"

data[].slugstring or nullrequired

Example: "batman"

data[].start_yearinteger or nullrequired

Example: 1939

data[].end_yearinteger or nullrequired

Example: 2011

data[].statusstring or nullrequired

Example: "ongoing"

data[].typestring or nullrequired

Example: "Series"

data[].image_urlstring or nullrequired

Example: "https://...-cover_md.webp"

data[].imagesobject or nullrequired
data[].images.cover_smstring

Example: "https://...-cover_sm.webp"

data[].images.cover_mdstring

Example: "https://...-cover_md.webp"

data[].images.cover_lgstring

Example: "https://...-cover_lg.webp"

data[].average_ratingstring or nullrequired

Example: "4.30"

data[].series_countinteger or nullrequired

Example: 25

data[].issues_countinteger or nullrequired

Example: 1450

data[].content_rating_labelstring or nullrequired

Example: "15+"

data[].min_ageinteger or nullrequired

Example: 15

data[].is_nsfwboolean or nullrequired
data[].name_i18nobjectrequired

One name per language, keyed by BCP 47 tag.

data[].aliases_i18nobjectrequired

Alternative names per language.

data[].original_localestring or nullrequired

The language the title is from, a BCP 47 tag.

Example: "en"

linksobjectrequired
links.firststringrequired
links.laststringrequired
links.prevstring or nullrequired
links.nextstring or nullrequired
metaobjectrequired
meta.current_pageintegerrequired

Example: 1

meta.frominteger or nullrequired

Example: 1

meta.last_pageintegerrequired

Example: 25

meta.linksarray of objectsrequired
meta.links[].urlstring or nullrequired
meta.links[].labelstringrequired
meta.links[].pageinteger or null
meta.links[].activebooleanrequired
meta.pathstringrequired
meta.per_pageintegerrequired

Example: 20

meta.tointeger or nullrequired

Example: 20

meta.totalintegerrequired

Example: 500

401

Unauthenticated. The bearer token is missing, invalid, or revoked.

messagestringrequired

Example: "Unauthenticated."

Example body, from the documented examples

{
  "message": "Unauthenticated."
}
403

The token lacks the read:public ability.

messagestringrequired

Example: "Insufficient token scope."

Example body, from the documented examples

{
  "message": "Insufficient token scope."
}
429

Rate limit exceeded. This endpoint allows 300/hour (free) or 1,000/hour (PRO). Wait for the number of seconds in the Retry-After header before retrying.

Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining

messagestringrequired

Example: "Too Many Attempts."

Example body, from the documented examples

{
  "message": "Too Many Attempts."
}

Example request

curl --request GET \
  'https://versedb.com/api/v1/titles' \
  --header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
  --header 'Accept: application/json'

Example response 200

{
  "data": [
    {
      "id": 12,
      "name": "Batman",
      "slug": "batman",
      "start_year": 1939,
      "end_year": 2011,
      "status": "ongoing",
      "type": "Series",
      "image_url": "https://...-cover_md.webp",
      "images": {
        "cover_sm": "https://...-cover_sm.webp",
        "cover_md": "https://...-cover_md.webp",
        "cover_lg": "https://...-cover_lg.webp"
      },
      "average_rating": "4.30",
      "series_count": 25,
      "issues_count": 1450,
      "content_rating_label": "15+",
      "min_age": 15,
      "name_i18n": {
        "ja": {
          "value": "講談社",
          "reading": "こうだんしゃ",
          "source": "madb"
        }
      },
      "aliases_i18n": {
        "en": [
          "Kodansha Comics"
        ]
      },
      "original_locale": "en"
    }
  ],
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 25,
    "per_page": 20,
    "to": 20,
    "total": 500
  }
}

Response headers

X-RateLimit-Limitinteger

Request quota per hour for your tier.

X-RateLimit-Remaininginteger

Requests remaining in the current window.

Retry-Afterinteger

Seconds to wait before retrying.