The Guardian Content API
Search and retrieve Guardian content items
Search and retrieve Guardian content items
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/guardian-content-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: Guardian Content API
description: The Guardian's Open Platform Content API provides free access to all content published on theguardian.com. Search for articles, browse sections and tags, retrieve specific content items, and access edition-specific content. Supports filtering by date, section, tag, and more.
version: 2.0.0
contact:
name: The Guardian Open Platform
url: https://open-platform.theguardian.com/
termsOfService: https://open-platform.theguardian.com/access/
x-jentic-source-url: https://open-platform.theguardian.com/
servers:
- url: https://content.guardianapis.com
description: Guardian Content API Production Server
security:
- apiKeyQuery: []
tags:
- name: Content
description: Search and retrieve Guardian content items
paths:
/search:
get:
operationId: searchContent
summary: Search for content
description: Search all Guardian content. Returns articles, liveblogs, galleries, and other content types matching the query. Results are paginated and can be filtered by section, tag, date range, and more.
tags:
- Content
parameters:
- name: q
in: query
description: Full-text search query. Supports AND, OR, NOT operators.
schema:
type: string
- name: query-fields
in: query
description: Specify which indexed fields are used by the q parameter (e.g., headline, body, all)
schema:
type: string
- name: section
in: query
description: Filter by section ID (e.g., technology, sport). Use | for OR, - prefix to exclude.
schema:
type: string
- name: tag
in: query
description: Filter by tag ID (e.g., technology/apple). Use comma for AND, | for OR, - to exclude.
schema:
type: string
- name: type
in: query
description: Filter by content type
schema:
type: string
enum:
- article
- liveblog
- gallery
- interactive
- picture
- video
- crossword
- audio
- name: from-date
in: query
description: Return content published on or after this date (YYYY-MM-DD)
schema:
type: string
format: date
- name: to-date
in: query
description: Return content published on or before this date (YYYY-MM-DD)
schema:
type: string
format: date
- name: order-by
in: query
description: Sort order for results
schema:
type: string
enum:
- newest
- oldest
- relevance
default: relevance
- name: show-fields
in: query
description: Comma-separated list of article fields to include (e.g., body,headline,thumbnail,shortUrl,byline,trailText,wordcount,starRating,all)
schema:
type: string
- name: show-tags
in: query
description: Comma-separated list of tag types to include (e.g., keyword,contributor,series,blog,tone,type,all)
schema:
type: string
- name: show-elements
in: query
description: Include media elements (image, video, audio, all)
schema:
type: string
- name: show-blocks
in: query
description: Include block-level content (body, all, main)
schema:
type: string
- name: show-references
in: query
description: Include references
schema:
type: string
- name: page
in: query
description: Page number for pagination
schema:
type: integer
default: 1
- name: page-size
in: query
description: Number of results per page (max 50 for free tier)
schema:
type: integer
default: 10
maximum: 200
- name: use-date
in: query
description: Which date to use for filtering and ordering
schema:
type: string
enum:
- published
- first-publication
- newspaper-edition
- last-modified
- name: lang
in: query
description: ISO language code to filter content by language
schema:
type: string
- name: star-rating
in: query
description: Filter by star rating (for reviews)
schema:
type: integer
minimum: 1
maximum: 5
- name: production-office
in: query
description: Filter by production office
schema:
type: string
enum:
- uk
- us
- aus
responses:
'200':
description: Successful response with search results
content:
application/json:
schema:
$ref: '#/components/schemas/SearchResponse'
'400':
description: Bad request - invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/{contentId}:
get:
operationId: getItem
summary: Get a single content item
description: Retrieve a specific content item by its ID path (e.g., technology/2024/jan/01/article-slug).
tags:
- Content
parameters:
- name: contentId
in: path
required: true
description: The ID (path) of the content item (e.g., world/2024/jan/01/article-slug)
schema:
type: string
- name: show-fields
in: query
description: Comma-separated list of fields to include
schema:
type: string
- name: show-tags
in: query
description: Comma-separated list of tag types to include
schema:
type: string
- name: show-elements
in: query
description: Include media elements
schema:
type: string
- name: show-blocks
in: query
description: Include block-level content
schema:
type: string
- name: show-references
in: query
description: Include references
schema:
type: string
responses:
'200':
description: Successful response with content item
content:
application/json:
schema:
$ref: '#/components/schemas/ItemResponse'
'404':
description: Content item not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
ContentItem:
type: object
properties:
id:
type: string
description: Unique content identifier path
type:
type: string
description: Content type
enum:
- article
- liveblog
- gallery
- interactive
- picture
- video
- crossword
- audio
sectionId:
type: string
description: Section identifier
sectionName:
type: string
description: Human-readable section name
webPublicationDate:
type: string
format: date-time
description: Publication date in ISO 8601 format
webTitle:
type: string
description: Article headline
webUrl:
type: string
format: uri
description: URL on theguardian.com
apiUrl:
type: string
format: uri
description: API URL for this content item
isHosted:
type: boolean
description: Whether the content is hosted by the Guardian
pillarId:
type: string
description: Content pillar identifier
pillarName:
type: string
description: Content pillar name
fields:
type: object
description: Additional fields (when show-fields is specified)
properties:
headline:
type: string
body:
type: string
thumbnail:
type: string
shortUrl:
type: string
byline:
type: string
trailText:
type: string
wordcount:
type: string
starRating:
type: string
standfirst:
type: string
lastModified:
type: string
publication:
type: string
tags:
type: array
items:
$ref: '#/components/schemas/Tag'
ErrorResponse:
type: object
properties:
response:
type: object
properties:
status:
type: string
enum:
- error
message:
type: string
description: Error message
ItemResponse:
type: object
properties:
response:
type: object
properties:
status:
type: string
userTier:
type: string
total:
type: integer
content:
$ref: '#/components/schemas/ContentItem'
Tag:
type: object
properties:
id:
type: string
description: Tag identifier
type:
type: string
description: Tag type
enum:
- keyword
- series
- contributor
- blog
- tone
- type
- newspaper-book
- newspaper-book-section
sectionId:
type: string
sectionName:
type: string
webTitle:
type: string
webUrl:
type: string
format: uri
apiUrl:
type: string
format: uri
keywordType:
type: string
SearchResponse:
type: object
properties:
response:
type: object
properties:
status:
type: string
description: Response status
enum:
- ok
- error
userTier:
type: string
description: API access tier
enum:
- developer
- partner
- internal
total:
type: integer
description: Total number of results
startIndex:
type: integer
description: Starting index of results
pageSize:
type: integer
description: Number of results per page
currentPage:
type: integer
description: Current page number
pages:
type: integer
description: Total number of pages
orderBy:
type: string
description: Sort order of results
results:
type: array
items:
$ref: '#/components/schemas/ContentItem'
securitySchemes:
apiKeyQuery:
type: apiKey
in: query
name: api-key
description: API key obtained from https://open-platform.theguardian.com/access/. A test key 'test' is available for development.