Dynamic content discovery endpoints for the home screen and new releases.
These endpoints provide curated and time-sensitive content like upcoming releases, FOC (Final Order Cutoff) deadlines, and new first issues.
Dynamic content discovery endpoints for the home screen and new releases.
These endpoints provide curated and time-sensitive content like upcoming releases, FOC (Final Order Cutoff) deadlines, and new first issues.
/api/v1/discovery/focReturns issues with Final Order Cutoff (FOC) deadline within the next N days. FOC is when retailers must place final orders with distributors (typically 2 weeks before release).
limitintegerResults per page (1-50).
Example: 10
pageintegerPage number; meta.last_page says where the list ends.
Example: 1
daysintegerFOC window in days (1-30).
Example: 7
start_datestringStart of FOC window (YYYY-MM-DD). Defaults to today.
Example: "2026-03-15"
publisher_idsstringComma-separated publisher IDs; matches issues from any of them.
Example: "1,4"
sortstringfoc_date (default: FOC date, then publisher, then series name), publisher (publisher, then FOC date, then series name) or series (series name, then FOC date).
Example: "foc_date"
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: 5432
data[].slugstring or nullrequiredExample: "amazing-spider-man-1"
data[].series_idinteger or nullrequiredExample: 123
data[].issue_numberstring or nullrequiredExample: "1"
data[].namestring or nullrequiredExample: "The Chameleon Strikes!"
data[].cover_datestring or nullrequiredExample: "2018-09-01"
data[].release_datestring or nullrequiredExample: "2018-07-11"
data[].foc_datestring or nullrequiredExample: "2018-06-18"
data[].is_unreleasedbooleanrequireddata[].cover_urlstring or nullrequiredExample: "https://...-cover_lg.webp"
data[].imagesobject or nullrequireddata[].images.thumbstringExample: "https://...-thumb.webp"
data[].images.cover_smstringExample: "https://...-cover_sm.webp"
data[].images.cover_mdstringExample: "https://...-cover_md.webp"
data[].images.cover_lgstringExample: "https://...-cover_lg.webp"
data[].is_reprintbooleanrequireddata[].content_rating_labelstring or nullrequiredExample: "Teen"
data[].min_ageinteger or nullrequiredExample: 13
data[].is_nsfwbooleanrequireddata[].average_ratingnumber or nullrequiredExample: 4.5
data[].name_i18nobjectrequiredOne name per language, keyed by BCP 47 tag.
data[].seriesobject or nulldata[].series.idintegerrequiredExample: 123
data[].series.namestring or nullrequiredExample: "The Amazing Spider-Man"
data[].series.slugstring or nullrequiredExample: "the-amazing-spider-man-2018"
data[].series.start_yearinteger or nullrequiredExample: 2018
data[].series.end_yearinteger or nullrequiredExample: 2022
data[].series.volume_numberinteger or nullrequiredExample: 5
data[].series.publication_typestring or nullrequiredExample: "regular_series"
data[].series.formatstring or nullrequiredExample: "Standard"
data[].series.cached_issues_countinteger or nullrequiredExample: 93
data[].series.cover_urlstring or nullrequiredExample: "https://...-cover_lg.webp"
data[].series.imagesobject or nullrequireddata[].series.images.cover_smstringExample: "https://...-cover_sm.webp"
data[].series.images.cover_mdstringExample: "https://...-cover_md.webp"
data[].series.images.cover_lgstringExample: "https://...-cover_lg.webp"
data[].series.publisher_namestring or nullrequiredExample: "Marvel"
metaobjectrequiredmeta.current_pageintegerrequiredExample: 1
meta.per_pageintegerrequiredExample: 10
meta.totalintegerrequiredExample: 28
meta.last_pageintegerrequiredExample: 3
meta.foc_window_daysintegerrequiredExample: 7
meta.foc_startstringrequiredExample: "2026-03-15"
meta.foc_endstringrequiredExample: "2026-03-22"
meta.sortstringrequiredExample: "foc_date"
meta.notestringrequiredExample: "FOC dates are estimates based on release_date - 14 days"
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."
}A query parameter out of range.
messagestringrequiredExample: "The days must not be greater than 30."
errorsobjectrequiredExample body, from the documented examples
{
"message": "The days must not be greater than 30.",
"errors": {
"days": [
"The days must not be greater than 30."
]
}
}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/discovery/foc' \
--header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
--header 'Accept: application/json'Example response 200
{
"data": [
{
"id": 5432,
"slug": "amazing-spider-man-1",
"series_id": 123,
"issue_number": "1",
"name": "The Chameleon Strikes!",
"cover_date": "2018-09-01",
"release_date": "2018-07-11",
"foc_date": "2018-06-18",
"cover_url": "https://...-cover_lg.webp",
"images": {
"thumb": "https://...-thumb.webp",
"cover_sm": "https://...-cover_sm.webp",
"cover_md": "https://...-cover_md.webp",
"cover_lg": "https://...-cover_lg.webp"
},
"content_rating_label": "Teen",
"min_age": 13,
"average_rating": 4.5,
"name_i18n": {
"ja": {
"value": "講談社",
"reading": "こうだんしゃ",
"source": "madb"
}
},
"series": {
"id": 123,
"name": "The Amazing Spider-Man",
"slug": "the-amazing-spider-man-2018",
"start_year": 2018,
"end_year": 2022,
"volume_number": 5,
"publication_type": "regular_series",
"format": "Standard",
"cached_issues_count": 93,
"cover_url": "https://...-cover_lg.webp",
"images": {
"cover_sm": "https://...-cover_sm.webp",
"cover_md": "https://...-cover_md.webp",
"cover_lg": "https://...-cover_lg.webp"
},
"publisher_name": "Marvel"
}
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 28,
"last_page": 3,
"foc_window_days": 7,
"foc_start": "2026-03-15",
"foc_end": "2026-03-22",
"sort": "foc_date",
"note": "FOC dates are estimates based on release_date - 14 days"
}
}/api/v1/discovery/follow-updatesReturns recent releases from the titles, characters, creators, and teams the user follows. A Series is not followable — it reaches this feed through its Title, and every volume of that title counts.
follow_contexts and follow_types are top-level maps keyed by issue id: the
context explains why the issue is shown ("New in X-Men"), the type is one of
title, character, creator, team.
daysintegerLookback window in days (1-90).
Example: 30
pageintegerPage number for pagination.
Example: 1
per_pageintegerItems per page (1-50).
Example: 20
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: 5432
data[].slugstring or nullrequiredExample: "amazing-spider-man-1"
data[].series_idinteger or nullrequiredExample: 123
data[].issue_numberstring or nullrequiredExample: "1"
data[].namestring or nullrequiredExample: "The Chameleon Strikes!"
data[].cover_datestring or nullrequiredExample: "2018-09-01"
data[].release_datestring or nullrequiredExample: "2018-07-11"
data[].foc_datestring or nullrequiredExample: "2018-06-18"
data[].is_unreleasedbooleanrequireddata[].cover_urlstring or nullrequiredExample: "https://...-cover_lg.webp"
data[].imagesobject or nullrequireddata[].images.thumbstringExample: "https://...-thumb.webp"
data[].images.cover_smstringExample: "https://...-cover_sm.webp"
data[].images.cover_mdstringExample: "https://...-cover_md.webp"
data[].images.cover_lgstringExample: "https://...-cover_lg.webp"
data[].is_reprintbooleanrequireddata[].content_rating_labelstring or nullrequiredExample: "Teen"
data[].min_ageinteger or nullrequiredExample: 13
data[].is_nsfwbooleanrequireddata[].average_ratingnumber or nullrequiredExample: 4.5
data[].name_i18nobjectrequiredOne name per language, keyed by BCP 47 tag.
data[].seriesobject or nulldata[].series.idintegerrequiredExample: 123
data[].series.namestring or nullrequiredExample: "The Amazing Spider-Man"
data[].series.slugstring or nullrequiredExample: "the-amazing-spider-man-2018"
data[].series.start_yearinteger or nullrequiredExample: 2018
data[].series.end_yearinteger or nullrequiredExample: 2022
data[].series.volume_numberinteger or nullrequiredExample: 5
data[].series.publication_typestring or nullrequiredExample: "regular_series"
data[].series.formatstring or nullrequiredExample: "Standard"
data[].series.cached_issues_countinteger or nullrequiredExample: 93
data[].series.cover_urlstring or nullrequiredExample: "https://...-cover_lg.webp"
data[].series.imagesobject or nullrequireddata[].series.images.cover_smstringExample: "https://...-cover_sm.webp"
data[].series.images.cover_mdstringExample: "https://...-cover_md.webp"
data[].series.images.cover_lgstringExample: "https://...-cover_lg.webp"
data[].series.publisher_namestring or nullrequiredExample: "Marvel"
follow_contextsobject or arrayfollow_typesobject or arraymetaobjectrequiredmeta.daysintegerrequiredExample: 30
meta.total_followsintegerrequiredExample: 12
meta.current_pageintegerrequiredExample: 1
meta.per_pageintegerrequiredExample: 20
meta.totalintegerrequiredExample: 1
meta.last_pageintegerrequiredExample: 1
Unauthenticated. The bearer token is missing, invalid, or revoked.
messagestringrequiredExample: "Unauthenticated."
Example body, from the documented examples
{
"message": "Unauthenticated."
}A token without read:user.
messagestringrequiredExample: "Insufficient token scope."
Example body, from the documented examples
{
"message": "Insufficient token scope."
}A query parameter out of range.
messagestringrequiredExample: "The days must not be greater than 30."
errorsobjectrequiredExample body, from the documented examples
{
"message": "The days must not be greater than 30.",
"errors": {
"days": [
"The days must not be greater than 30."
]
}
}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/discovery/follow-updates' \
--header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
--header 'Accept: application/json'Example response 200
{
"data": [
{
"id": 5432,
"slug": "amazing-spider-man-1",
"series_id": 123,
"issue_number": "1",
"name": "The Chameleon Strikes!",
"cover_date": "2018-09-01",
"release_date": "2018-07-11",
"foc_date": "2018-06-18",
"cover_url": "https://...-cover_lg.webp",
"images": {
"thumb": "https://...-thumb.webp",
"cover_sm": "https://...-cover_sm.webp",
"cover_md": "https://...-cover_md.webp",
"cover_lg": "https://...-cover_lg.webp"
},
"content_rating_label": "Teen",
"min_age": 13,
"average_rating": 4.5,
"name_i18n": {
"ja": {
"value": "講談社",
"reading": "こうだんしゃ",
"source": "madb"
}
},
"series": {
"id": 123,
"name": "The Amazing Spider-Man",
"slug": "the-amazing-spider-man-2018",
"start_year": 2018,
"end_year": 2022,
"volume_number": 5,
"publication_type": "regular_series",
"format": "Standard",
"cached_issues_count": 93,
"cover_url": "https://...-cover_lg.webp",
"images": {
"cover_sm": "https://...-cover_sm.webp",
"cover_md": "https://...-cover_md.webp",
"cover_lg": "https://...-cover_lg.webp"
},
"publisher_name": "Marvel"
}
}
],
"follow_contexts": {
"5432": "New in X-Men"
},
"follow_types": {
"5432": "title"
},
"meta": {
"days": 30,
"total_follows": 12,
"current_page": 1,
"per_page": 20,
"total": 1,
"last_page": 1
}
}/api/v1/discovery/upcoming-firstsReturns upcoming first issues (#1) from new ongoing series within the next N days. Useful for discovering new series launches.
limitintegerResults per page (1-50).
Example: 10
pageintegerPage number; meta.last_page says where the list ends.
Example: 1
daysintegerLookahead window in days (1-90).
Example: 60
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: 5432
data[].slugstring or nullrequiredExample: "amazing-spider-man-1"
data[].series_idinteger or nullrequiredExample: 123
data[].issue_numberstring or nullrequiredExample: "1"
data[].namestring or nullrequiredExample: "The Chameleon Strikes!"
data[].cover_datestring or nullrequiredExample: "2018-09-01"
data[].release_datestring or nullrequiredExample: "2018-07-11"
data[].foc_datestring or nullrequiredExample: "2018-06-18"
data[].is_unreleasedbooleanrequireddata[].cover_urlstring or nullrequiredExample: "https://...-cover_lg.webp"
data[].imagesobject or nullrequireddata[].images.thumbstringExample: "https://...-thumb.webp"
data[].images.cover_smstringExample: "https://...-cover_sm.webp"
data[].images.cover_mdstringExample: "https://...-cover_md.webp"
data[].images.cover_lgstringExample: "https://...-cover_lg.webp"
data[].is_reprintbooleanrequireddata[].content_rating_labelstring or nullrequiredExample: "Teen"
data[].min_ageinteger or nullrequiredExample: 13
data[].is_nsfwbooleanrequireddata[].average_ratingnumber or nullrequiredExample: 4.5
data[].name_i18nobjectrequiredOne name per language, keyed by BCP 47 tag.
data[].seriesobject or nulldata[].series.idintegerrequiredExample: 123
data[].series.namestring or nullrequiredExample: "The Amazing Spider-Man"
data[].series.slugstring or nullrequiredExample: "the-amazing-spider-man-2018"
data[].series.start_yearinteger or nullrequiredExample: 2018
data[].series.end_yearinteger or nullrequiredExample: 2022
data[].series.volume_numberinteger or nullrequiredExample: 5
data[].series.publication_typestring or nullrequiredExample: "regular_series"
data[].series.formatstring or nullrequiredExample: "Standard"
data[].series.cached_issues_countinteger or nullrequiredExample: 93
data[].series.cover_urlstring or nullrequiredExample: "https://...-cover_lg.webp"
data[].series.imagesobject or nullrequireddata[].series.images.cover_smstringExample: "https://...-cover_sm.webp"
data[].series.images.cover_mdstringExample: "https://...-cover_md.webp"
data[].series.images.cover_lgstringExample: "https://...-cover_lg.webp"
data[].series.publisher_namestring or nullrequiredExample: "Marvel"
metaobjectrequiredmeta.current_pageintegerrequiredExample: 1
meta.per_pageintegerrequiredExample: 10
meta.totalintegerrequiredExample: 28
meta.last_pageintegerrequiredExample: 3
meta.lookahead_daysintegerrequiredExample: 60
meta.window_startstringrequiredExample: "2026-03-15"
meta.window_endstringrequiredExample: "2026-05-14"
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."
}A query parameter out of range.
messagestringrequiredExample: "The days must not be greater than 30."
errorsobjectrequiredExample body, from the documented examples
{
"message": "The days must not be greater than 30.",
"errors": {
"days": [
"The days must not be greater than 30."
]
}
}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/discovery/upcoming-firsts' \
--header 'Authorization: Bearer {YOUR_AUTH_KEY}' \
--header 'Accept: application/json'Example response 200
{
"data": [
{
"id": 5432,
"slug": "amazing-spider-man-1",
"series_id": 123,
"issue_number": "1",
"name": "The Chameleon Strikes!",
"cover_date": "2018-09-01",
"release_date": "2018-07-11",
"foc_date": "2018-06-18",
"cover_url": "https://...-cover_lg.webp",
"images": {
"thumb": "https://...-thumb.webp",
"cover_sm": "https://...-cover_sm.webp",
"cover_md": "https://...-cover_md.webp",
"cover_lg": "https://...-cover_lg.webp"
},
"content_rating_label": "Teen",
"min_age": 13,
"average_rating": 4.5,
"name_i18n": {
"ja": {
"value": "講談社",
"reading": "こうだんしゃ",
"source": "madb"
}
},
"series": {
"id": 123,
"name": "The Amazing Spider-Man",
"slug": "the-amazing-spider-man-2018",
"start_year": 2018,
"end_year": 2022,
"volume_number": 5,
"publication_type": "regular_series",
"format": "Standard",
"cached_issues_count": 93,
"cover_url": "https://...-cover_lg.webp",
"images": {
"cover_sm": "https://...-cover_sm.webp",
"cover_md": "https://...-cover_md.webp",
"cover_lg": "https://...-cover_lg.webp"
},
"publisher_name": "Marvel"
}
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 28,
"last_page": 3,
"lookahead_days": 60,
"window_start": "2026-03-15",
"window_end": "2026-05-14"
}
}X-RateLimit-LimitintegerRequest quota per hour for your tier.
X-RateLimit-RemainingintegerRequests remaining in the current window.
Retry-AfterintegerSeconds to wait before retrying.