MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by visiting your dashboard and clicking Generate API token. The token should be prefixed with "Bearer ".

Endpoints

List all titles with optional search

requires authentication

Returns: id, name, slug, start_year, end_year, status, type, image_url, age_rating, is_nsfw, cached_series_count, cached_issues_count, average_rating, total_reviews

Example request:
curl --request GET \
    --get "https://versedb.com/api/titles?q=spider-man&publisher=1&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/titles"
);

const params = {
    "q": "spider-man",
    "publisher": "1",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/titles

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by title name. Example: spider-man

publisher   integer  optional    

Filter by publisher ID. Example: 1

limit   integer  optional    

Number of results per page (max 50). Example: 20

Get a specific title

requires authentication

Returns: id, name, slug, description, start_year, end_year, status, type, image_url, age_rating, is_nsfw, imprint_id, cached_series_count, cached_issues_count, average_rating, total_reviews, aliases

Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/titles/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/titles/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/titles/{title_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

title_id   integer     

The ID of the title. Example: 1

List all series with optional search

requires authentication

Returns: id, title_id, name, slug, number, start_year, end_year, image_url, publication_type, format, status, original_language, cached_issues_count, average_rating, total_reviews, age_rating, is_nsfw

Example request:
curl --request GET \
    --get "https://versedb.com/api/series?q=spider-man&title_id=1&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/series"
);

const params = {
    "q": "spider-man",
    "title_id": "1",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/series

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by series name. Example: spider-man

title_id   integer  optional    

Filter by title ID. Example: 1

limit   integer  optional    

Number of results per page (max 50). Example: 20

requires authentication

Returns a list of series that are currently featured in the discover section.

Example request:
curl --request GET \
    --get "https://versedb.com/api/series/featured?limit=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/series/featured"
);

const params = {
    "limit": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Get newest series

requires authentication

Returns a list of the most recently created series.

Example request:
curl --request GET \
    --get "https://versedb.com/api/series/new?limit=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/series/new"
);

const params = {
    "limit": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/series/new

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

limit   integer  optional    

Maximum number of results (default: 10, max: 50). Example: 10

Get a specific series

requires authentication

Returns: id, title_id, name, slug, number, start_year, end_year, image_url, description, publication_type, format, status, original_language, cached_issues_count, average_rating, total_reviews, imprint_id, age_rating, aliases, is_nsfw

Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/series/4" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/series/4"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/series/{series_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

series_id   integer     

The ID of the series. Example: 4

List all issues with pagination and filtering

requires authentication

Returns: id, slug, series_id, title_id, issue_number, name, release_date, image_url, type, format, is_reprint, age_rating, is_nsfw

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues?q=origin&series_id=1&release_date_from=2024-01-01&release_date_to=2024-12-31&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues"
);

const params = {
    "q": "origin",
    "series_id": "1",
    "release_date_from": "2024-01-01",
    "release_date_to": "2024-12-31",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/issues

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by issue name. Example: origin

series_id   integer  optional    

Filter by series ID. Example: 1

release_date_from   string  optional    

Filter by release date (from). Example: 2024-01-01

release_date_to   string  optional    

Filter by release date (to). Example: 2024-12-31

limit   integer  optional    

Number of results per page (max 100). Example: 20

requires authentication

Returns a list of issues that are currently featured in the discover section. These are issues highlighted as "Hot This Week" based on trending topics, new releases, and editorial selection.

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/featured?limit=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/featured"
);

const params = {
    "limit": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Get newest issues

requires authentication

Returns a list of the most recently released issues.

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/new?limit=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/new"
);

const params = {
    "limit": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/issues/new

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

limit   integer  optional    

Maximum number of results (default: 10, max: 50). Example: 10

Get issue details

requires authentication

Returns: id, slug, series_id, title_id, issue_number, name, description, release_date, cover_date, image_url, type, format, is_reprint, age_rating, is_nsfw, page_count, price, isbn, upc, diamond_code, ean, issn, is_anthology, is_tie_in, is_movie_adaptation, has_collected_edition, print_run, locations, imprint_id

Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/issues/{issue_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   integer     

The ID of the issue. Example: 1

List all publishers with optional search

requires authentication

Returns: id, name, slug, founded_year, status, logo_url

Example request:
curl --request GET \
    --get "https://versedb.com/api/publishers?q=marvel&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/publishers"
);

const params = {
    "q": "marvel",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/publishers

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by publisher name. Example: marvel

limit   integer  optional    

Number of results per page (max 50). Example: 20

requires authentication

Returns a list of publishers that are currently featured in the discover section.

Example request:
curl --request GET \
    --get "https://versedb.com/api/publishers/featured?limit=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/publishers/featured"
);

const params = {
    "limit": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Get publisher details

requires authentication

Returns: id, name, slug, description, founded_year, website, email, headquarters, parent_company, status, logo_url

Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/publishers/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/publishers/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/publishers/{publisher_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

publisher_id   integer     

The ID of the publisher. Example: 1

List all story arcs with optional search

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/story-arcs?q=civil+war&status=ended&type=crossover_event&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/story-arcs"
);

const params = {
    "q": "civil war",
    "status": "ended",
    "type": "crossover_event",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/story-arcs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by story arc name. Example: civil war

status   string  optional    

Filter by status. Example: ended

type   string  optional    

Filter by type. Example: crossover_event

limit   integer  optional    

Number of results per page (max 50). Example: 20

Display the specified resource.

requires authentication

Returns story arc details without relationship data. Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/story-arcs/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/story-arcs/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/story-arcs/{storyArc_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

storyArc_id   string     

The ID of the storyArc. Example: architecto

List all creators with optional search

requires authentication

Returns: id, name, slug, role, profile_photo_url

Example request:
curl --request GET \
    --get "https://versedb.com/api/creators?q=alan&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/creators"
);

const params = {
    "q": "alan",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/creators

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by creator name. Example: alan

limit   integer  optional    

Number of results per page (max 50). Example: 20

requires authentication

Returns a list of creators that are currently featured in the discover section.

Example request:
curl --request GET \
    --get "https://versedb.com/api/creators/featured?limit=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/creators/featured"
);

const params = {
    "limit": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Get a specific creator

requires authentication

Returns: id, name, slug, role, profile_photo_url, biography, gender, birth, death, birth_place, country, aliases, links, awards

Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/creators/janis-abbott" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/creators/janis-abbott"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/creators/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the creator. Example: janis-abbott

List all characters with optional search

requires authentication

Returns: id, name, slug, real_name, profile_photo_url

Example request:
curl --request GET \
    --get "https://versedb.com/api/characters?q=spider&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/characters"
);

const params = {
    "q": "spider",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/characters

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by character name. Example: spider

limit   integer  optional    

Number of results per page (max 50). Example: 20

requires authentication

Returns a list of characters that are currently featured in the discover section.

Example request:
curl --request GET \
    --get "https://versedb.com/api/characters/featured?limit=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/characters/featured"
);

const params = {
    "limit": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Get a specific character

requires authentication

Returns: id, name, slug, real_name, aliases, profile_photo_url, description, alter_ego, gender, birthday, race, birth_place, occupation, height, weight, citizenship, education

Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/characters/16" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/characters/16"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/characters/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the character. Example: 16

List all teams with optional search

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/teams?q=avengers&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/teams"
);

const params = {
    "q": "avengers",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/teams

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by team name. Example: avengers

limit   integer  optional    

Number of results per page (max 50). Example: 20

Get a specific team

requires authentication

Returns team details without relationship data. Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/teams/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/teams/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/teams/{team_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

team_id   integer     

The ID of the team. Example: 1

List all universes with optional search

requires authentication

Returns: id, name

Example request:
curl --request GET \
    --get "https://versedb.com/api/universes?q=marvel&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/universes"
);

const params = {
    "q": "marvel",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/universes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by universe name. Example: marvel

limit   integer  optional    

Number of results per page (max 50). Example: 20

Get a specific universe

requires authentication

Returns: id, name, description

Use PRO endpoints for relationship data:

Example request:
curl --request GET \
    --get "https://versedb.com/api/universes/16" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/universes/16"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/universes/{universe_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

universe_id   integer     

The ID of the universe. Example: 16

Display a listing of comic shops.

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/shops" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/shops"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/shops

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Display the specified comic shop.

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/shops/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/shops/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/shops/{shop_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

shop_id   integer     

The ID of the shop. Example: 1

List all podcasts with optional search

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/podcasts?q=comic&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/podcasts"
);

const params = {
    "q": "comic",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/podcasts

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string  optional    

Search by podcast name. Example: comic

limit   integer  optional    

Number of results per page (max 50). Example: 20

Display the specified podcast.

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/podcasts/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/podcasts/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/podcasts/{podcast_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

podcast_id   integer     

The ID of the podcast. Example: 1

List episodes for a specific podcast

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/podcasts/1/episodes?q=batman&limit=20" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/podcasts/1/episodes"
);

const params = {
    "q": "batman",
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/podcasts/{podcast_id}/episodes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

podcast_id   integer     

The ID of the podcast. Example: 1

Query Parameters

q   string  optional    

Search by episode title. Example: batman

limit   integer  optional    

Number of results per page (max 50). Example: 20

Display the specified episode.

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/podcasts/1/episodes/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/podcasts/1/episodes/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/podcasts/{podcast_id}/episodes/{episode_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

podcast_id   integer     

The ID of the podcast. Example: 1

episode_id   integer     

The ID of the episode. Example: 1

Get all variants for a specific issue (PRO only)

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1/variants" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/1/variants"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/issues/{issue_id}/variants

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   integer     

The ID of the issue. Example: 1

Get a specific variant (PRO only)

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1/variants/16" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/1/variants/16"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/issues/{issue_id}/variants/{variant_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   integer     

The ID of the issue. Example: 1

variant_id   integer     

The ID of the variant. Example: 16

Get issues for a specific series (PRO only)

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/series/4/issues" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/series/4/issues"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/series/{id}/issues

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the series. Example: 4

Get creators for a specific series (PRO only)

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/series/4/creators" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/series/4/creators"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/series/{id}/creators

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the series. Example: 4

Get characters for a specific series (PRO only)

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/series/4/characters" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/series/4/characters"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/series/{id}/characters

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the series. Example: 4

Get creators for a specific issue (PRO only)

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1/creators" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/1/creators"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/issues/{id}/creators

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the issue. Example: 1

Get characters for a specific issue (PRO only)

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1/characters" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/1/characters"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/issues/{id}/characters

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the issue. Example: 1

Get story arcs for a specific title

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/titles/1/story-arcs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/titles/1/story-arcs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/titles/{title_id}/story-arcs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

title_id   integer     

The ID of the title. Example: 1

Get story arcs for a specific series

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/series/4/story-arcs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/series/4/story-arcs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/series/{series_id}/story-arcs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

series_id   integer     

The ID of the series. Example: 4

Get story arcs for a specific issue

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1/story-arcs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/1/story-arcs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/issues/{issue_id}/story-arcs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   integer     

The ID of the issue. Example: 1

Get story arcs for a specific character

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/characters/16/story-arcs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/characters/16/story-arcs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/characters/{character_id}/story-arcs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

character_id   integer     

The ID of the character. Example: 16

Get story arcs for a specific publisher

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/publishers/1/story-arcs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/publishers/1/story-arcs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/publishers/{publisher_id}/story-arcs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

publisher_id   integer     

The ID of the publisher. Example: 1

Get story arcs for a specific universe

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/universes/16/story-arcs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/universes/16/story-arcs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/universes/{universe_id}/story-arcs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

universe_id   integer     

The ID of the universe. Example: 16

Get characters for a specific team (members)

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/teams/1/characters" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/teams/1/characters"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/teams/{team_id}/characters

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

team_id   integer     

The ID of the team. Example: 1

Get series for a specific team

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/teams/1/series" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/teams/1/series"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/teams/{team_id}/series

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

team_id   integer     

The ID of the team. Example: 1

Get issues for a specific team

requires authentication

Requires PRO subscription. Returns 402 Payment Required for non-PRO users.

Example request:
curl --request GET \
    --get "https://versedb.com/api/teams/1/issues" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/teams/1/issues"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Example response (402, PRO subscription required):


{
    "message": "This endpoint requires a PRO subscription.",
    "error": "pro_required",
    "upgrade_url": "https://versedb.com/subscription"
}
 

Request      

GET api/teams/{team_id}/issues

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

team_id   integer     

The ID of the team. Example: 1

Get live marketplace listings for an issue.

requires authentication

PRO subscription required.

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1/market/listings" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/1/market/listings"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/issues/{issue_id}/market/listings

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   integer     

The ID of the issue. Example: 1

Get price snapshots (aggregated pricing data) for an issue.

requires authentication

PRO subscription required.

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1/market/snapshots" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"grade_type\": \"architecto\",
    \"grade_value\": 2,
    \"days\": 7
}"
const url = new URL(
    "https://versedb.com/api/issues/1/market/snapshots"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "grade_type": "architecto",
    "grade_value": 2,
    "days": 7
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/issues/{issue_id}/market/snapshots

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   integer     

The ID of the issue. Example: 1

Body Parameters

grade_type   string  optional    

Example: architecto

grade_value   number  optional    

Must be at least 0.5. Must not be greater than 10. Example: 2

days   integer  optional    

Must be at least 7. Must not be greater than 365. Example: 7

Get all price snapshots for all grades of an issue (for pricing overview).

requires authentication

PRO subscription required.

Example request:
curl --request GET \
    --get "https://versedb.com/api/issues/1/market/overview" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/issues/1/market/overview"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/issues/{issue_id}/market/overview

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   integer     

The ID of the issue. Example: 1

GET api/user

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/user" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/user"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/user

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/user/collections

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/user/collections" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/user/collections"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/user/collections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/user/wishlists

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/user/wishlists" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/user/wishlists"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/user/wishlists

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/user/pull-list

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/user/pull-list" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/user/pull-list"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/user/pull-list

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/user/follows

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/user/follows" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/user/follows"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/user/follows

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/user/read-status

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/user/read-status" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/user/read-status"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/user/read-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/collections

requires authentication

Example request:
curl --request POST \
    "https://versedb.com/api/collections" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"is_public\": false
}"
const url = new URL(
    "https://versedb.com/api/collections"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Eius et animi quos velit et.",
    "is_public": false
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/collections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

is_public   boolean  optional    

Example: false

PUT api/collections/{id}

requires authentication

Example request:
curl --request PUT \
    "https://versedb.com/api/collections/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"is_public\": false
}"
const url = new URL(
    "https://versedb.com/api/collections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Eius et animi quos velit et.",
    "is_public": false
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/collections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the collection. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

is_public   boolean  optional    

Example: false

DELETE api/collections/{id}

requires authentication

Example request:
curl --request DELETE \
    "https://versedb.com/api/collections/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/collections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/collections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the collection. Example: architecto

POST api/collections/{id}/items

requires authentication

Example request:
curl --request POST \
    "https://versedb.com/api/collections/architecto/items" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"issue_id\": \"architecto\",
    \"condition\": \"architecto\",
    \"purchased_at\": \"2025-12-13T18:08:51\",
    \"notes\": \"architecto\",
    \"format\": \"architecto\",
    \"storage_location\": \"architecto\",
    \"price_paid\": 39
}"
const url = new URL(
    "https://versedb.com/api/collections/architecto/items"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "issue_id": "architecto",
    "condition": "architecto",
    "purchased_at": "2025-12-13T18:08:51",
    "notes": "architecto",
    "format": "architecto",
    "storage_location": "architecto",
    "price_paid": 39
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/collections/{id}/items

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the collection. Example: architecto

Body Parameters

issue_id   string     

The id of an existing record in the issues table. Example: architecto

variant_id   string  optional    

The id of an existing record in the issue_variants table.

condition   string  optional    

Example: architecto

purchased_at   string  optional    

Must be a valid date. Example: 2025-12-13T18:08:51

notes   string  optional    

Example: architecto

format   string  optional    

Example: architecto

storage_location   string  optional    

Example: architecto

price_paid   number  optional    

Must be at least 0. Example: 39

DELETE api/collections/{collection_id}/items/{item_id}

requires authentication

Example request:
curl --request DELETE \
    "https://versedb.com/api/collections/architecto/items/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/collections/architecto/items/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/collections/{collection_id}/items/{item_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

collection_id   string     

The ID of the collection. Example: architecto

item_id   string     

The ID of the item. Example: architecto

POST api/wishlists

requires authentication

Example request:
curl --request POST \
    "https://versedb.com/api/wishlists" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\"
}"
const url = new URL(
    "https://versedb.com/api/wishlists"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Eius et animi quos velit et."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/wishlists

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

PUT api/wishlists/{id}

requires authentication

Example request:
curl --request PUT \
    "https://versedb.com/api/wishlists/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\"
}"
const url = new URL(
    "https://versedb.com/api/wishlists/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Eius et animi quos velit et."
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/wishlists/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the wishlist. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

DELETE api/wishlists/{id}

requires authentication

Example request:
curl --request DELETE \
    "https://versedb.com/api/wishlists/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/wishlists/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/wishlists/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the wishlist. Example: architecto

POST api/wishlists/{id}/items

requires authentication

Example request:
curl --request POST \
    "https://versedb.com/api/wishlists/architecto/items" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"issue_id\": \"architecto\"
}"
const url = new URL(
    "https://versedb.com/api/wishlists/architecto/items"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "issue_id": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/wishlists/{id}/items

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the wishlist. Example: architecto

Body Parameters

issue_id   string     

The id of an existing record in the issues table. Example: architecto

DELETE api/wishlists/{wishlist_id}/items/{item_id}

requires authentication

Example request:
curl --request DELETE \
    "https://versedb.com/api/wishlists/architecto/items/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/wishlists/architecto/items/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/wishlists/{wishlist_id}/items/{item_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

wishlist_id   string     

The ID of the wishlist. Example: architecto

item_id   string     

The ID of the item. Example: architecto

POST api/pull-list/items

requires authentication

Example request:
curl --request POST \
    "https://versedb.com/api/pull-list/items" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"series_id\": \"architecto\"
}"
const url = new URL(
    "https://versedb.com/api/pull-list/items"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "series_id": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/pull-list/items

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

series_id   string     

The id of an existing record in the series table. Example: architecto

DELETE api/pull-list/items/{id}

requires authentication

Example request:
curl --request DELETE \
    "https://versedb.com/api/pull-list/items/4" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/pull-list/items/4"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/pull-list/items/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the item. Example: 4

Follow a resource (Title, Character, or Podcast).

requires authentication

Example request:
curl --request POST \
    "https://versedb.com/api/follow" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"character\",
    \"id\": 123,
    \"preferences\": {
        \"email_notifications\": true
    }
}"
const url = new URL(
    "https://versedb.com/api/follow"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "type": "character",
    "id": 123,
    "preferences": {
        "email_notifications": true
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "Following character successfully",
    "is_following": true
}
 

Request      

POST api/follow

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

type   string     

The type of resource (title, character, podcast). Example: character

id   integer     

The ID of the resource. Example: 123

preferences   object  optional    

optional Notification preferences.

Unfollow a resource (Title, Character, or Podcast).

requires authentication

Example request:
curl --request DELETE \
    "https://versedb.com/api/follow/character/123" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/follow/character/123"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Unfollowed character successfully",
    "is_following": false
}
 

Request      

DELETE api/follow/{type}/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

type   string     

The type of resource (title, character, podcast). Example: character

id   integer     

The ID of the resource. Example: 123

Check if user is following a resource.

requires authentication

Example request:
curl --request GET \
    --get "https://versedb.com/api/follow/character/123/check" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://versedb.com/api/follow/character/123/check"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "is_following": true
}
 

Request      

GET api/follow/{type}/{id}/check

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

type   string     

The type of resource (title, character, podcast). Example: character

id   integer     

The ID of the resource. Example: 123

POST api/issues/{id}/read-status

requires authentication

Example request:
curl --request POST \
    "https://versedb.com/api/issues/1/read-status" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
const url = new URL(
    "https://versedb.com/api/issues/1/read-status"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/issues/{id}/read-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the issue. Example: 1

Body Parameters

variant_id   string  optional    

The id of an existing record in the issue_variants table.

DELETE api/issues/{id}/read-status

requires authentication

Example request:
curl --request DELETE \
    "https://versedb.com/api/issues/1/read-status" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
const url = new URL(
    "https://versedb.com/api/issues/1/read-status"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/issues/{id}/read-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the issue. Example: 1

Body Parameters

variant_id   string  optional    

The id of an existing record in the issue_variants table.

Submit a completed sale (user submission).

requires authentication

Example request:
curl --request POST \
    "https://versedb.com/api/issues/1/market/sales" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"provider\": \"b\",
    \"external_listing_id\": \"n\",
    \"sold_at\": \"2025-12-13T18:08:52\",
    \"price\": 7,
    \"currency\": \"zmi\",
    \"grade_type\": \"architecto\",
    \"grade_value\": 2,
    \"grade_label\": \"g\",
    \"source_url\": \"http:\\/\\/www.okuneva.com\\/fugiat-sunt-nihil-accusantium-harum-mollitia.html\"
}"
const url = new URL(
    "https://versedb.com/api/issues/1/market/sales"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "provider": "b",
    "external_listing_id": "n",
    "sold_at": "2025-12-13T18:08:52",
    "price": 7,
    "currency": "zmi",
    "grade_type": "architecto",
    "grade_value": 2,
    "grade_label": "g",
    "source_url": "http:\/\/www.okuneva.com\/fugiat-sunt-nihil-accusantium-harum-mollitia.html"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/issues/{issue_id}/market/sales

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   integer     

The ID of the issue. Example: 1

Body Parameters

provider   string     

Must not be greater than 50 characters. Example: b

external_listing_id   string     

Must not be greater than 100 characters. Example: n

sold_at   string     

Must be a valid date. Example: 2025-12-13T18:08:52

price   number     

Must be at least 0.01. Must not be greater than 999999.99. Example: 7

currency   string     

Must be 3 characters. Example: zmi

grade_type   string     

Example: architecto

grade_value   number  optional    

Must be at least 0.5. Must not be greater than 10. Example: 2

grade_label   string  optional    

Must not be greater than 50 characters. Example: g

source_url   string  optional    

Must be a valid URL. Must not be greater than 512 characters. Example: http://www.okuneva.com/fugiat-sunt-nihil-accusantium-harum-mollitia.html