Thrive Global stories API
Articles, role model stories, and recipes
Articles, role model stories, and recipes
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/thrive-global-stories-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Thrive Global Partner audio experiences Stories API
description: 'API for accessing Thrive Global content and features. All content endpoints require a Bearer token obtained via the authentication endpoint.
Response envelopes follow the pattern `{ message, valid, data }` where `data` contains the response payload. Collection endpoints nest items at a resource-specific path (e.g. `data.data.reset.thrive.get.items`).'
version: 1.7.0
contact:
name: Thrive Global
url: https://thriveglobal.com/contact/sales
servers:
- url: https://partners-api.thriveglobal.com
description: Production server
- url: https://partners-api-stag.thriveglobal.com
description: Staging server
tags:
- name: stories
description: Articles, role model stories, and recipes
paths:
/v3/stories:
get:
operationId: getThriveStoriesV3
tags:
- stories
summary: Get stories with recipe fields (v3)
description: V3 includes `servings`, `ingredients`, and `directions` on recipe-type articles.
security:
- BearerAuth: []
parameters:
- name: page
in: query
schema:
type: integer
default: 1
description: Page number
- name: limit
in: query
schema:
type: integer
default: 500
description: Items per page
- name: locale
in: query
schema:
type: string
default: en
description: Language locale (e.g. en, es, en-GB)
- name: stripExternalLinks
in: query
schema:
type: boolean
default: false
description: When true, links to non-Thrive domains are removed from content fields; the link text is preserved. Links to thriveglobal.com and relative links are kept.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
message:
type: string
valid:
type: boolean
data:
type: object
properties:
data:
type: object
properties:
learnV2:
type: object
properties:
getArticlesV2:
$ref: '#/components/schemas/StoryCollection'
'401':
description: Unauthorized — missing or invalid token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v2/stories:
get:
operationId: getThriveStoriesV2
tags:
- stories
summary: Get stories and articles with pagination (v2)
description: Same as v3 but without recipe-specific fields (servings, ingredients, directions).
security:
- BearerAuth: []
parameters:
- name: page
in: query
schema:
type: integer
default: 1
description: Page number
- name: limit
in: query
schema:
type: integer
default: 500
description: Items per page
- name: locale
in: query
schema:
type: string
default: en
description: Language locale (e.g. en, es, en-GB)
- name: stripExternalLinks
in: query
schema:
type: boolean
default: false
description: When true, links to non-Thrive domains are removed from content fields; the link text is preserved. Links to thriveglobal.com and relative links are kept.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
message:
type: string
valid:
type: boolean
data:
type: object
properties:
data:
type: object
properties:
learnV2:
type: object
properties:
getArticlesV2:
$ref: '#/components/schemas/StoryCollection'
'401':
description: Unauthorized — missing or invalid token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v1/stories:
get:
operationId: getThriveStoriesV1
tags:
- stories
summary: Get all stories (v1, static, up to 5000 items)
security:
- BearerAuth: []
parameters:
- name: locale
in: query
schema:
type: string
default: en
description: Language locale (e.g. en, es, en-GB)
- name: stripExternalLinks
in: query
schema:
type: boolean
default: false
description: When true, links to non-Thrive domains are removed from content fields; the link text is preserved. Links to thriveglobal.com and relative links are kept.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
message:
type: string
valid:
type: boolean
data:
type: object
properties:
data:
type: object
properties:
learnV2:
type: object
properties:
getArticlesV2:
$ref: '#/components/schemas/StoryCollection'
'401':
description: Unauthorized — missing or invalid token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v3/stories/{id}:
get:
operationId: getStoryByIdV3
tags:
- stories
summary: Get a single story by ID with recipe fields (v3)
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the story (UUID)
example: 550e8400-e29b-41d4-a716-446655440000
- name: locale
in: query
schema:
type: string
default: en
description: Language locale (e.g. en, es, en-GB)
- name: stripExternalLinks
in: query
schema:
type: boolean
default: false
description: When true, links to non-Thrive domains are removed from content fields; the link text is preserved. Links to thriveglobal.com and relative links are kept.
responses:
'200':
description: Item retrieved successfully
content:
application/json:
schema:
type: object
properties:
message:
type: string
valid:
type: boolean
example: true
data:
type: object
properties:
data:
type: object
properties:
learnV2:
type: object
properties:
item:
$ref: '#/components/schemas/StoryItem'
'401':
description: Unauthorized — missing or invalid token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Item not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v2/stories/{id}:
get:
operationId: getStoryByIdV2
tags:
- stories
summary: Get a single story by ID (v2)
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the story (UUID)
example: 550e8400-e29b-41d4-a716-446655440000
- name: locale
in: query
schema:
type: string
default: en
description: Language locale (e.g. en, es, en-GB)
responses:
'200':
description: Item retrieved successfully
content:
application/json:
schema:
type: object
properties:
message:
type: string
valid:
type: boolean
example: true
data:
type: object
properties:
data:
type: object
properties:
learnV2:
type: object
properties:
item:
$ref: '#/components/schemas/StoryItem'
'401':
description: Unauthorized — missing or invalid token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Item not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v1/stories/{id}:
get:
operationId: getStoryByIdV1
tags:
- stories
summary: Get a single story by ID (v1)
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
description: Unique identifier of the story (UUID)
example: 550e8400-e29b-41d4-a716-446655440000
- name: locale
in: query
schema:
type: string
default: en
description: Language locale (e.g. en, es, en-GB)
responses:
'200':
description: Item retrieved successfully
content:
application/json:
schema:
type: object
properties:
message:
type: string
valid:
type: boolean
example: true
data:
type: object
properties:
data:
type: object
properties:
learnV2:
type: object
properties:
item:
$ref: '#/components/schemas/StoryItem'
'401':
description: Unauthorized — missing or invalid token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Item not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
StoryItem:
type: object
description: An article, role model story, or recipe.
required:
- id
- title
properties:
id:
type: string
format: uuid
title:
type: string
summary:
type:
- string
- 'null'
body:
type:
- string
- 'null'
description: HTML content
imageUrl:
type:
- string
- 'null'
audioUrl:
type:
- string
- 'null'
contentType:
type: string
description: 'Discriminator: article, roleModel, or recipe'
articleContentType:
type: string
description: e.g. Text, Video, Audio
durationSeconds:
type:
- integer
- 'null'
language:
type:
- string
- 'null'
source:
type:
- string
- 'null'
description: HLS source URL for video articles
authors:
type: array
items:
$ref: '#/components/schemas/ArticleAuthor'
tags:
type: array
items:
$ref: '#/components/schemas/TaxonomyTerm'
description: Tags associated with this story, as term objects.
conditions:
type: array
items:
$ref: '#/components/schemas/TaxonomyTerm'
description: Health conditions associated with this story, as term objects.
journeyIds:
type: array
items:
type: string
format: uuid
journeys:
type: array
items:
$ref: '#/components/schemas/ArticleJourney'
coreHealthBehaviors:
type: array
items:
$ref: '#/components/schemas/ArticleJourney'
description: Core health behaviors associated with this story; contains the same values as `journeys`.
spotlightSubscriptionIds:
type: array
items:
type: string
featuredSubscriptionIds:
type: array
items:
type: string
seoDescription:
type:
- string
- 'null'
seoTitle:
type:
- string
- 'null'
imageAlternativeText:
type:
- string
- 'null'
collection:
type:
- string
- 'null'
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
servings:
type:
- integer
- 'null'
description: 'Recipe only (v3): number of servings'
ingredients:
type:
- string
- 'null'
description: 'Recipe only (v3): ingredients text'
directions:
type:
- string
- 'null'
description: 'Recipe only (v3): cooking directions'
conditionType:
type: string
description: Comma-separated names of the associated conditions
isSpotlight:
type: boolean
description: Whether the story is spotlighted
isFeatured:
type: boolean
description: True when `featuredSubscriptionIds` is non-empty
thumbnailUrl:
type:
- string
- 'null'
description: Thumbnail image URL; matches `imageUrl`
excerpt:
type:
- string
- 'null'
description: Short excerpt; matches `summary`
author:
type:
- string
- 'null'
description: Name of the first author
ErrorResponse:
type: object
required:
- message
- valid
properties:
message:
type: string
valid:
type: boolean
example: false
ArticleJourney:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
shortName:
type:
- string
- 'null'
description:
type:
- string
- 'null'
imageUrl:
type:
- string
- 'null'
emoji:
type:
- string
- 'null'
hasMicrosteps:
type: boolean
image:
type:
- string
- 'null'
coreType:
type:
- string
- 'null'
preferredOrder:
type:
- integer
- 'null'
thumbnailUrl:
type:
- string
- 'null'
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
colorPalette:
type:
- object
- 'null'
properties:
contrastText:
type: string
dark:
type: string
light:
type: string
main:
type: string
ArticleAuthor:
type: object
properties:
name:
type: string
title:
type:
- string
- 'null'
bio:
type:
- string
- 'null'
photoUrl:
type:
- string
- 'null'
format: uri
StoryCollection:
type: object
description: Paginated stories. Located at `data.data.learnV2.getArticlesV2` in the response.
properties:
items:
type: array
items:
$ref: '#/components/schemas/StoryItem'
pageSize:
type: integer
pageCount:
type: integer
page:
type: integer
hasMore:
type: boolean
TaxonomyTerm:
type: object
description: One shape for all taxonomy layers (`tags`, `conditions`, `coreHealthBehaviors`). `id` is the durable key — persist this, not `slug`. `slug` is the kebab-case machine key used in query-parameter filters and may change if the term is renamed. `name` is the display string.
required:
- id
- slug
- name
properties:
id:
type:
- string
- 'null'
description: Stable identifier for the term; null where none exists
slug:
type: string
example: sleep
name:
type:
- string
- 'null'
example: Sleep
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT