Endpoints for browsing and searching comic book characters.
Characters include heroes, villains, and supporting characters across all publishers.
Endpoints for browsing and searching comic book characters.
Characters include heroes, villains, and supporting characters across all publishers.
/api/v1/characters/api/v1/characters/{character_id}/api/v1/characters/{character_id}/series/api/v1/characters/{character_id}/issues/api/v1/characters/{character_id}/teams/api/v1/charactersReturns paginated characters by name, with optional search and filters.
qstringSearch by character name. Without a search hit, matches the name or real name containing it.
Example: "spider-man"
publisher_idsstringComma-separated publisher IDs. Returns characters published by any of them.
Example: "1,2"
rolesstringComma-separated character roles (name or slug, such as hero or villain). Returns characters with any of them.
Example: "hero"
powersstringComma-separated power slugs. Returns characters with any of them.
Example: "flight"
sortstringPass any value to replace the relevance ordering applied to q results with the name.
Example: "name"
limitintegerResults per page (max 50).
Example: 20
pageintegerPage number; meta.last_page says where the list ends.
Example: 1
languagesstringKeep only these languages in the _i18n maps (comma-separated BCP 47 tags). No other field changes.
Example: "ja,ko"
Success
Headers: X-RateLimit-Limit, X-RateLimit-Remaining
dataarray of objectsrequireddata[].idintegerrequiredExample: 456
data[].namestring or nullrequiredExample: "Spider-Man (Peter Parker)"
data[].slugstring or nullrequiredExample: "spider-man-peter-parker"
data[].real_namestring or nullrequiredExample: "Peter Parker"
data[].aliasesarray of stringsrequiredExample: ["Spidey","Web-Head"]
data[].racestring or nullrequiredExample: "Human"
data[].image_urlstring or nullrequiredExample: "https://...-full_lg.webp"
data[].imagesobject or nullrequireddata[].images.tile_smstringExample: "https://...-tile_sm.webp"
data[].images.profile_mdstringExample: "https://...-profile_md.webp"
data[].images.full_lgstringExample: "https://...-full_lg.webp"
data[].appearances_countintegerrequiredExample: 5400
data[].publisher_namestring or nullPresent when the character has a publisher.
Example: "Marvel Comics"
data[].name_i18nobjectrequiredOne name per language, keyed by BCP 47 tag.
data[].aliases_i18nobjectrequiredAlternative names per language.
data[].original_localestring or nullrequiredThe language the entity is from, a BCP 47 tag.
Example: "en"
data[].real_name_i18nobjectrequiredOne name per language, keyed by BCP 47 tag.
linksobjectrequiredlinks.firststringrequiredlinks.laststringrequiredlinks.prevstring or nullrequiredlinks.nextstring or nullrequiredmetaobjectrequiredmeta.current_pageintegerrequiredExample: 1
meta.frominteger or nullrequiredExample: 1
meta.last_pageintegerrequiredExample: 25
meta.linksarray of objectsrequiredmeta.links[].urlstring or nullrequiredmeta.links[].labelstringrequiredmeta.links[].pageinteger or nullmeta.links[].activebooleanrequiredmeta.pathstringrequiredmeta.per_pageintegerrequiredExample: 20
meta.tointeger or nullrequiredExample: 20
meta.totalintegerrequiredExample: 500
Unauthenticated. The bearer token is missing, invalid, or revoked.
messagestringrequiredExample: "Unauthenticated."
Example body, from the documented examples
{
"message": "Unauthenticated."
}The token lacks the read:public ability.
messagestringrequiredExample: "Insufficient token scope."
Example body, from the documented examples
{
"message": "Insufficient token scope."
}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
messagestringrequiredExample: "Too Many Attempts."
Example body, from the documented examples
{
"message": "Too Many Attempts."
}curl --request GET \
'https://versedb.com/api/v1/characters' \
--header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
--header 'Accept: application/json'Example response 200
{
"data": [
{
"id": 456,
"name": "Spider-Man (Peter Parker)",
"slug": "spider-man-peter-parker",
"real_name": "Peter Parker",
"aliases": [
"Spidey",
"Web-Head"
],
"race": "Human",
"image_url": "https://...-full_lg.webp",
"images": {
"tile_sm": "https://...-tile_sm.webp",
"profile_md": "https://...-profile_md.webp",
"full_lg": "https://...-full_lg.webp"
},
"appearances_count": 5400,
"publisher_name": "Marvel Comics",
"name_i18n": {
"ja": {
"value": "講談社",
"reading": "こうだんしゃ",
"source": "madb"
}
},
"aliases_i18n": {
"en": [
"Kodansha Comics"
]
},
"original_locale": "en",
"real_name_i18n": {
"ja": {
"value": "講談社",
"reading": "こうだんしゃ",
"source": "madb"
}
}
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 25,
"per_page": 20,
"to": 20,
"total": 500
}
}/api/v1/characters/{character_id}Returns a single character with full details including publishers and cached relationship counts (appearances, series, teams, story arcs) so clients can decide which related-entity tabs to expose.
character_idintegerrequiredThe character ID.
Example: 456
languagesstringKeep only these languages in the _i18n maps (comma-separated BCP 47 tags). No other field changes.
Example: "ja,ko"
Success
Headers: X-RateLimit-Limit, X-RateLimit-Remaining
dataobjectrequireddata.idintegerrequiredExample: 456
data.namestring or nullrequiredExample: "Spider-Man (Peter Parker)"
data.slugstring or nullrequiredExample: "spider-man-peter-parker"
data.real_namestring or nullrequiredExample: "Peter Parker"
data.aliasesarray of strings or nullrequiredExample: ["Spidey","Web-Head","Webslinger"]
data.image_urlstring or nullrequiredExample: "https://...-full_lg.webp"
data.imagesobject or nullrequireddata.images.tile_smstringExample: "https://...-tile_sm.webp"
data.images.profile_mdstringExample: "https://...-profile_md.webp"
data.images.full_lgstringExample: "https://...-full_lg.webp"
data.alter_egostring or number or boolean or array or object or nullrequiredOther identities, as stored: a list of strings in production.
Example: ["Spidey"]
data.genderstring or nullrequiredExample: "male"
data.birthdaystring or nullrequiredExample: "2001-08-10"
data.racestring or nullrequiredExample: "Human"
data.birth_placestring or nullrequiredExample: "Queens, New York"
data.occupationstring or nullrequiredExample: "Photographer, Scientist"
data.heightstring or nullrequiredExample: "5'10\""
data.weightstring or nullrequiredExample: "167 lbs"
data.citizenshipstring or nullrequiredExample: "American"
data.educationstring or nullrequiredExample: "College"
data.appearances_countintegerrequiredExample: 12500
data.series_countintegerrequiredExample: 320
data.teams_countintegerrequiredExample: 8
data.story_arcs_countintegerrequiredExample: 47
data.eye_colorstringPresent when the character has one.
Example: "Hazel"
data.hair_colorstringPresent when the character has one.
Example: "Brown"
data.powersarray of stringsPresent when the character has one.
Example: ["Super strength","Wall-crawling","Spider-sense"]
data.weaknessesarray of stringsPresent when the character has one.
Example: ["Ethyl chloride"]
data.equipmentarray of stringsPresent when the character has one.
Example: ["Web-shooters"]
data.abilitiesarray of stringsPresent when the character has one.
Example: ["Genius-level intellect"]
data.rolesarray of stringsPresent when the character has one.
Example: ["Hero"]
data.publisherobjectdata.publisher.idintegerrequiredExample: 1
data.publisher.namestring or nullrequiredExample: "Marvel"
data.publisher.slugstring or nullrequiredExample: "marvel"
data.name_i18nobjectrequiredOne name per language, keyed by BCP 47 tag.
data.aliases_i18nobjectrequiredAlternative names per language.
data.original_localestring or nullrequiredThe language the entity is from, a BCP 47 tag.
Example: "en"
data.real_name_i18nobjectrequiredOne name per language, keyed by BCP 47 tag.
Unauthenticated. The bearer token is missing, invalid, or revoked.
messagestringrequiredExample: "Unauthenticated."
Example body, from the documented examples
{
"message": "Unauthenticated."
}The token lacks the read:public ability.
messagestringrequiredExample: "Insufficient token scope."
Example body, from the documented examples
{
"message": "Insufficient token scope."
}Not Found
messagestringrequiredExample: "No query results for model [App\\Models\\Character] 456"
Example body, from the documented examples
{
"message": "No query results for model [App\\Models\\Character] 456"
}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
messagestringrequiredExample: "Too Many Attempts."
Example body, from the documented examples
{
"message": "Too Many Attempts."
}curl --request GET \
'https://versedb.com/api/v1/characters/456' \
--header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
--header 'Accept: application/json'Example response 200
{
"data": {
"id": 456,
"name": "Spider-Man (Peter Parker)",
"slug": "spider-man-peter-parker",
"real_name": "Peter Parker",
"aliases": [
"Spidey",
"Web-Head",
"Webslinger"
],
"image_url": "https://...-full_lg.webp",
"images": {
"tile_sm": "https://...-tile_sm.webp",
"profile_md": "https://...-profile_md.webp",
"full_lg": "https://...-full_lg.webp"
},
"alter_ego": [
"Spidey"
],
"gender": "male",
"birthday": "2001-08-10",
"race": "Human",
"birth_place": "Queens, New York",
"occupation": "Photographer, Scientist",
"height": "5'10\"",
"weight": "167 lbs",
"citizenship": "American",
"education": "College",
"appearances_count": 12500,
"series_count": 320,
"teams_count": 8,
"story_arcs_count": 47,
"eye_color": "Hazel",
"hair_color": "Brown",
"powers": [
"Super strength",
"Wall-crawling",
"Spider-sense"
],
"weaknesses": [
"Ethyl chloride"
],
"equipment": [
"Web-shooters"
],
"abilities": [
"Genius-level intellect"
],
"roles": [
"Hero"
],
"publisher": {
"id": 1,
"name": "Marvel",
"slug": "marvel"
},
"name_i18n": {
"ja": {
"value": "講談社",
"reading": "こうだんしゃ",
"source": "madb"
}
},
"aliases_i18n": {
"en": [
"Kodansha Comics"
]
},
"original_locale": "en",
"real_name_i18n": {
"ja": {
"value": "講談社",
"reading": "こうだんしゃ",
"source": "madb"
}
}
}
}/api/v1/characters/{character_id}/seriesReturns paginated series where the character appears.
character_idintegerrequiredThe character ID.
Example: 456
limitintegerResults per page (max 50).
Example: 20
qstringOptional case-insensitive search within these results.
Example: "batman"
mediumstringComma-separated series mediums to filter by (comic, manga, manhwa, manhua, bande_dessinee, magazine).
Example: "comic,manga"
languagesstringKeep only these languages in the _i18n maps (comma-separated BCP 47 tags). No other field changes, and Accept-Language is not read.
Example: "ja,ko"
Success
Headers: X-RateLimit-Limit, X-RateLimit-Remaining
dataarray of objectsdata[].idintegerExample: 123
data[].namestringExample: "Amazing Spider-Man"
data[].name_i18nobjectdata[].aliases_i18nobjectdata[].original_localestringExample: "en"
data[].slugstringExample: "amazing-spider-man-2018"
data[].start_yearintegerExample: 2018
data[].end_yearintegerExample: 2022
data[].image_urlstringExample: "https://..."
metaobjectmeta.current_pageintegerExample: 1
meta.last_pageintegerExample: 5
meta.per_pageintegerExample: 20
meta.totalintegerExample: 100
Unauthenticated. The bearer token is missing, invalid, or revoked.
messagestringrequiredExample: "Unauthenticated."
Example body, from the documented examples
{
"message": "Unauthenticated."
}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
messagestringrequiredExample: "Too Many Attempts."
Example body, from the documented examples
{
"message": "Too Many Attempts."
}curl --request GET \
'https://versedb.com/api/v1/characters/456/series' \
--header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
--header 'Accept: application/json'Example response 200
{
"data": [
{
"id": 123,
"name": "Amazing Spider-Man",
"name_i18n": {},
"aliases_i18n": {},
"original_locale": "en",
"slug": "amazing-spider-man-2018",
"start_year": 2018,
"end_year": 2022,
"image_url": "https://..."
}
],
"meta": {
"current_page": 1,
"last_page": 5,
"per_page": 20,
"total": 100
}
}/api/v1/characters/{character_id}/issuesReturns paginated issues where the character appears, ordered by release date.
character_idintegerrequiredThe character ID.
Example: 456
limitintegerResults per page (max 50).
Example: 20
qstringOptional case-insensitive search within these results.
Example: "batman"
mediumstringComma-separated series mediums to filter by (comic, manga, manhwa, manhua, bande_dessinee, magazine).
Example: "comic,manga"
languagesstringKeep only these languages in the _i18n maps (comma-separated BCP 47 tags). No other field changes, and Accept-Language is not read.
Example: "ja,ko"
Success
Headers: X-RateLimit-Limit, X-RateLimit-Remaining
dataarray of objectsdata[].idintegerExample: 5432
data[].numberstringExample: "1"
data[].namestringExample: "The Amazing Spider-Man #1"
data[].name_i18nobjectdata[].release_datestringExample: "2018-07-11"
data[].cover_urlstringExample: "https://..."
data[].seriesobjectdata[].series.idintegerExample: 123
data[].series.namestringExample: "Amazing Spider-Man"
metaobjectmeta.current_pageintegerExample: 1
meta.last_pageintegerExample: 100
meta.per_pageintegerExample: 20
meta.totalintegerExample: 2000
Unauthenticated. The bearer token is missing, invalid, or revoked.
messagestringrequiredExample: "Unauthenticated."
Example body, from the documented examples
{
"message": "Unauthenticated."
}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
messagestringrequiredExample: "Too Many Attempts."
Example body, from the documented examples
{
"message": "Too Many Attempts."
}curl --request GET \
'https://versedb.com/api/v1/characters/456/issues' \
--header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
--header 'Accept: application/json'Example response 200
{
"data": [
{
"id": 5432,
"number": "1",
"name": "The Amazing Spider-Man #1",
"name_i18n": {},
"release_date": "2018-07-11",
"cover_url": "https://...",
"series": {
"id": 123,
"name": "Amazing Spider-Man"
}
}
],
"meta": {
"current_page": 1,
"last_page": 100,
"per_page": 20,
"total": 2000
}
}/api/v1/characters/{character_id}/teamsReturns paginated teams the character is a member of, including membership details.
character_idintegerrequiredThe character ID.
Example: 456
limitintegerResults per page (max 50).
Example: 20
qstringOptional case-insensitive search within these results.
Example: "batman"
languagesstringKeep only these languages in the _i18n maps (comma-separated BCP 47 tags). No other field changes, and Accept-Language is not read.
Example: "ja,ko"
Success
Headers: X-RateLimit-Limit, X-RateLimit-Remaining
dataarray of objectsdata[].idintegerExample: 10
data[].namestringExample: "Avengers"
data[].name_i18nobjectdata[].aliases_i18nobjectdata[].original_localestringExample: "en"
data[].slugstringExample: "avengers"
data[].image_urlstringExample: "https://..."
data[].membershipobjectdata[].membership.rolestringExample: "Member"
data[].membership.joined_datestringExample: "2012-05-01"
data[].membership.left_datestring or nullExample: null
metaobjectmeta.current_pageintegerExample: 1
meta.last_pageintegerExample: 1
meta.per_pageintegerExample: 20
meta.totalintegerExample: 5
Unauthenticated. The bearer token is missing, invalid, or revoked.
messagestringrequiredExample: "Unauthenticated."
Example body, from the documented examples
{
"message": "Unauthenticated."
}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
messagestringrequiredExample: "Too Many Attempts."
Example body, from the documented examples
{
"message": "Too Many Attempts."
}curl --request GET \
'https://versedb.com/api/v1/characters/456/teams' \
--header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
--header 'Accept: application/json'Example response 200
{
"data": [
{
"id": 10,
"name": "Avengers",
"name_i18n": {},
"aliases_i18n": {},
"original_locale": "en",
"slug": "avengers",
"image_url": "https://...",
"membership": {
"role": "Member",
"joined_date": "2012-05-01",
"left_date": null
}
}
],
"meta": {
"current_page": 1,
"last_page": 1,
"per_page": 20,
"total": 5
}
}X-RateLimit-LimitintegerRequest quota per hour for your tier.
X-RateLimit-RemainingintegerRequests remaining in the current window.
Retry-AfterintegerSeconds to wait before retrying.