Curse Mods API
The Mods API from Curse — 19 operation(s) for mods.
The Mods API from Curse — 19 operation(s) for mods.
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/curse-mods-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: CurseForge Core Categories Mods API
description: All endpoints use the same base URL - [https://api.curseforge.com](https://api.curseforge.com)
version: v1
servers:
- url: https://api.curseforge.com
security:
- API_KEY: []
tags:
- name: Mods
paths:
/v1/mods/search:
get:
tags:
- Mods
description: Get all mods that match the search criteria.
operationId: Search Mods
parameters:
- name: gameId
in: query
required: true
description: Filter by game id.
schema:
type: integer
format: int32
x-position: 1
- name: classId
in: query
description: Filter by section id (discoverable via Categories)
schema:
type: integer
format: int32
x-position: 2
- name: categoryId
in: query
description: Filter by category id
schema:
type: integer
format: int32
x-position: 3
- name: categoryIds
in: query
description: "Filter by a list of category ids - this will override categoryId\ncategoryIds=[1,2,3...]\n \nThe maximum allowed category ids per query is 10"
schema:
type: string
x-position: 4
- name: gameVersion
in: query
description: Filter by game version string
schema:
type: string
x-position: 5
- name: gameVersions
in: query
description: "Filter by a list of game version strings - this will override\ngameVersion\n \ngameVersions=[\"1.19.1\", \"1.19.2\", \"1.20.1\" ...]\n \nThe maximum allowed category ids per query is 4"
schema:
type: string
x-position: 6
- name: searchFilter
in: query
description: Filter by free text search in the mod name and author
schema:
type: string
x-position: 7
- name: sortField
in: query
description: Filter by ModsSearchSortField enumeration
schema:
$ref: '#/components/schemas/ModsSearchSortField'
x-position: 8
- name: sortOrder
in: query
description: '''asc'' if sort is in ascending order, ''desc'' if sort is in descending order'
schema:
$ref: '#/components/schemas/SortOrder'
x-position: 9
- name: modLoaderType
in: query
description: Filter only mods associated to a given modloader (Forge, Fabric ...). Must be coupled with gameVersion.
schema:
$ref: '#/components/schemas/ModLoaderType'
x-position: 10
- name: modLoaderTypes
in: query
description: "Filter by a list of mod loader types - this will override modLoaderType\nmodLoaderTypes=[Forge, Fabric, ...]\n \nMax values = 5"
schema:
type: string
x-position: 11
- name: gameVersionTypeId
in: query
description: Filter only mods that contain files tagged with versions of the given gameVersionTypeId
schema:
type:
- integer
- 'null'
format: int32
x-position: 12
- name: authorId
in: query
description: Filter only mods that the given authorId is a member of.
schema:
type:
- integer
- 'null'
format: int32
x-position: 13
- name: primaryAuthorId
in: query
description: Filter only mods that the given primaryAuthorId is the owner of.
schema:
type:
- integer
- 'null'
format: int32
x-position: 14
- name: PremiumType
in: query
description: Filter only mods that are Premium or not.
schema:
$ref: '#/components/schemas/ModPremiumTypeEnum'
x-position: 15
- name: slug
in: query
description: Filter by slug (coupled with classId will result in a unique result).
schema:
type: string
x-position: 16
- name: clientCompatible
in: query
description: 'When set to true, will filter out any mod that doesn''t have a default
file that is compatible with the client. This is usually due to a bad
file structure of the file (which might cause unexpected behaviours on
the user''s machine - such as overriding other mods installed).'
schema:
type: boolean
x-position: 17
- name: modsSearchEnhancedFeatures
in: query
description: Bitwise number with values from ModsSearchEnhancedFeatures
schema:
type: integer
format: int64
x-position: 18
- name: index
in: query
description: 'A zero based index of the first item to include in the response, the limit is: (index + pageSize <= 10,000).'
schema:
type: integer
format: int32
x-position: 19
- name: pageSize
in: query
description: The number of items to include in the response, the default/maximum value is 50.
schema:
type: integer
format: int32
x-position: 20
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseWithPaginationOfListOfModDto'
'500':
description: ''
'400':
description: ''
/v1/mods/app-search:
post:
tags:
- Mods
operationId: App Mods Search
requestBody:
x-name: request
content:
application/json:
schema:
$ref: '#/components/schemas/SearchModsPostRequest'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Search_Mods_Response'
'500':
description: ''
'400':
description: ''
/v1/mods/{modId}:
get:
tags:
- Mods
description: Get a single mod.
operationId: Get Mod
parameters:
- name: modId
in: path
required: true
description: The mod id
schema:
type: integer
format: int32
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfModDto'
'500':
description: ''
'404':
description: ''
/v1/mods/get-mods-by-ids:
post:
tags:
- Mods
description: Get a list of mods belonging the the same game.
operationId: Get Mods
requestBody:
x-name: requestBody
description: Request body containing an array of mod ids, mod ids must belong to the same game.
content:
application/json:
schema:
$ref: '#/components/schemas/GetExpandedModsByIdsListRequestBody'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfListOfModDto'
'500':
description: ''
'400':
description: ''
/v1/mods:
post:
tags:
- Mods
description: Get a list of mods belonging the the same game.
operationId: Get Mods2
requestBody:
x-name: requestBody
description: Request body containing an array of mod ids, mod ids must belong to the same game.
content:
application/json:
schema:
$ref: '#/components/schemas/GetExpandedModsByIdsListRequestBody'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfListOfModDto'
'500':
description: ''
'400':
description: ''
/v1/mods/featured:
post:
tags:
- Mods
description: Get a list of featured, popular and recently updated mods.
operationId: Get Featured Mods
requestBody:
x-name: filter
description: Match results for a game and exclude specific mods
content:
application/json:
schema:
$ref: '#/components/schemas/GetFeaturedModsRequestBody'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfFeaturedModsResponseOfModDto'
'500':
description: ''
'400':
description: ''
'404':
description: ''
/v1/mods/{modId}/description:
get:
tags:
- Mods
description: Get the full description of a mod in HTML format.
operationId: Get Mod Description
parameters:
- name: modId
in: path
required: true
description: The mod id
schema:
type: integer
format: int32
x-position: 1
- name: raw
in: query
schema:
type: boolean
x-position: 2
- name: stripped
in: query
schema:
type: boolean
x-position: 3
- name: markup
in: query
schema:
type: boolean
x-position: 4
- name: lang
in: query
schema:
type: string
default: en
x-position: 5
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/String_Response'
'500':
description: ''
'404':
description: ''
/v1/mods/app-highlights:
get:
tags:
- Mods
operationId: Mods_GetAppModHighlights
parameters:
- name: gameId
in: query
schema:
type: integer
format: int32
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfAppHighlightsResponse'
'404':
description: ''
/v1/mods/highlights:
post:
tags:
- Mods
operationId: Get Mod Highlights
requestBody:
x-name: body
content:
application/json:
schema:
$ref: '#/components/schemas/GetHighlightsFeaturedRequest'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfHomepageHighlightsResponse'
'500':
description: ''
/v3/mods/highlights:
post:
tags:
- Mods
operationId: Get Mod Highlights2
requestBody:
x-name: body
content:
application/json:
schema:
$ref: '#/components/schemas/GetHighlightsFeaturedRequest'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfHomepageHighlightsResponse2'
'500':
description: ''
/v3/mods:
get:
tags:
- Mods
operationId: Mods_GetById
parameters:
- name: modId
in: query
schema:
type: integer
format: int32
x-position: 1
responses:
'200':
description: ''
content:
application/octet-stream:
schema:
type: string
format: binary
/v2/mods/app-highlights:
get:
tags:
- Mods
operationId: Mods_GetAppModHighlights2
parameters:
- name: gameId
in: query
schema:
type: integer
format: int32
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfAppHighlightsResponse2'
'404':
description: ''
/v2/mods/highlights:
post:
tags:
- Mods
operationId: Get Mod Highlights22
requestBody:
x-name: body
content:
application/json:
schema:
$ref: '#/components/schemas/GetHighlightsFeaturedRequest'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfHomepageHighlightsResponse3'
'500':
description: ''
/v2/mods/search:
get:
tags:
- Mods
description: Get all mods that match the search criteria.
operationId: Search Mods2
parameters:
- name: gameId
in: query
required: true
description: Filter by game id.
schema:
type: integer
format: int32
x-position: 1
- name: classId
in: query
description: Filter by section id (discoverable via Categories)
schema:
type: integer
format: int32
x-position: 2
- name: categoryId
in: query
description: Filter by category id
schema:
type: integer
format: int32
x-position: 3
- name: categoryIds
in: query
description: "Filter by a list of category ids - this will override categoryId\ncategoryIds=[1,2,3...]\n \nThe maximum allowed category ids per query is 10"
schema:
type: string
x-position: 4
- name: gameVersion
in: query
description: Filter by game version string
schema:
type: string
x-position: 5
- name: gameVersions
in: query
description: "Filter by a list of game version strings - this will override\ngameVersion\n \ngameVersions=[\"1.19.1\", \"1.19.2\", \"1.20.1\" ...]\n \nThe maximum allowed category ids per query is 4"
schema:
type: string
x-position: 6
- name: searchFilter
in: query
description: Filter by free text search in the mod name and author
schema:
type: string
x-position: 7
- name: sortField
in: query
description: Filter by ModsSearchSortField enumeration
schema:
$ref: '#/components/schemas/ModsSearchSortField'
x-position: 8
- name: sortOrder
in: query
description: '''asc'' if sort is in ascending order, ''desc'' if sort is in descending order'
schema:
$ref: '#/components/schemas/SortOrder'
x-position: 9
- name: modLoaderType
in: query
description: Filter only mods associated to a given modloader (Forge, Fabric ...). Must be coupled with gameVersion.
schema:
$ref: '#/components/schemas/ModLoaderType'
x-position: 10
- name: modLoaderTypes
in: query
description: "Filter by a list of mod loader types - this will override modLoaderType\nmodLoaderTypes=[Forge, Fabric, ...]\n \nMax values = 5"
schema:
type: string
x-position: 11
- name: gameVersionTypeId
in: query
description: Filter only mods that contain files tagged with versions of the given gameVersionTypeId
schema:
type:
- integer
- 'null'
format: int32
x-position: 12
- name: authorId
in: query
description: Filter only mods that the given authorId is a member of.
schema:
type:
- integer
- 'null'
format: int32
x-position: 13
- name: primaryAuthorId
in: query
description: Filter only mods that the given primaryAuthorId is the owner of.
schema:
type:
- integer
- 'null'
format: int32
x-position: 14
- name: PremiumType
in: query
description: Filter only mods that are Premium or not.
schema:
$ref: '#/components/schemas/ModPremiumTypeEnum'
x-position: 15
- name: slug
in: query
description: Filter by slug (coupled with classId will result in a unique result).
schema:
type: string
x-position: 16
- name: clientCompatible
in: query
description: 'When set to true, will filter out any mod that doesn''t have a default
file that is compatible with the client. This is usually due to a bad
file structure of the file (which might cause unexpected behaviours on
the user''s machine - such as overriding other mods installed).'
schema:
type: boolean
x-position: 17
- name: modsSearchEnhancedFeatures
in: query
description: Bitwise number with values from ModsSearchEnhancedFeatures
schema:
type: integer
format: int64
x-position: 18
- name: index
in: query
description: 'A zero based index of the first item to include in the response, the limit is: (index + pageSize <= 10,000).'
schema:
type: integer
format: int32
x-position: 19
- name: pageSize
in: query
description: The number of items to include in the response, the default/maximum value is 50.
schema:
type: integer
format: int32
x-position: 20
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Search_Mods_Response'
'500':
description: ''
'400':
description: ''
/v2/mods/community-picks-candidates:
post:
tags:
- Mods
operationId: Mods_GetCommunityPicksCandidates
requestBody:
x-name: request
content:
application/json:
schema:
$ref: '#/components/schemas/CommunityPicksCandidatesRequests'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Search_Mods_Response'
'404':
description: ''
/v2/mods/app-search:
post:
tags:
- Mods
operationId: App Mods Search2
requestBody:
x-name: request
content:
application/json:
schema:
$ref: '#/components/schemas/SearchModsPostRequest'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Search_Mods_Response'
'500':
description: ''
'400':
description: ''
/v2/mods/{modId}:
get:
tags:
- Mods
description: Get a single mod.
operationId: Get Mod2
parameters:
- name: modId
in: path
required: true
description: The mod id
schema:
type: integer
format: int32
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Get_Mod_Response'
'500':
description: ''
'404':
description: ''
/v2/mods/get-mods-by-ids:
post:
tags:
- Mods
description: Get a list of mods belonging the the same game.
operationId: Get Mods22
requestBody:
x-name: requestBody
description: Request body containing an array of mod ids, mod ids must belong to the same game.
content:
application/json:
schema:
$ref: '#/components/schemas/GetExpandedModsByIdsListRequestBody'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfListOfModDto2'
'500':
description: ''
'400':
description: ''
/v2/mods/featured:
post:
tags:
- Mods
description: Get a list of featured, popular and recently updated mods.
operationId: Get Featured Mods2
requestBody:
x-name: filter
description: Match results for a game and exclude specific mods
content:
application/json:
schema:
$ref: '#/components/schemas/GetFeaturedModsRequestBody'
required: true
x-position: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponseOfFeaturedModsResponseOfModDto2'
'500':
description: ''
'400':
description: ''
'404':
description: ''
components:
schemas:
HighlightsModDto:
type: object
additionalProperties: false
properties:
id:
type: integer
format: int32
logo:
$ref: '#/components/schemas/ModAsset'
name:
type: string
authors:
type: array
items:
$ref: '#/components/schemas/ModAuthor'
ratingDetails:
$ref: '#/components/schemas/RatingDetails'
downloadCount:
type: integer
format: int64
fileSize:
type:
- integer
- 'null'
format: int64
Search_Mods_Response:
type: object
additionalProperties: false
properties:
data:
type: array
description: The response data
items:
$ref: '#/components/schemas/Mod'
pagination:
description: The response pagination information
$ref: '#/components/schemas/Pagination'
ApiResponseOfListOfModDto:
type: object
additionalProperties: false
properties:
data:
type: array
description: The response data
items:
$ref: '#/components/schemas/ModDto'
FileRelationType:
type: integer
description: '1 = EmbeddedLibrary
2 = OptionalDependency
3 = RequiredDependency
4 = Tool
5 = Incompatible
6 = Include'
x-enumNames:
- EmbeddedLibrary
- OptionalDependency
- RequiredDependency
- Tool
- Incompatible
- Include
enum:
- 1
- 2
- 3
- 4
- 5
- 6
FeaturedModsResponseOfModDto:
type: object
additionalProperties: false
properties:
featured:
type: array
items:
$ref: '#/components/schemas/ModDto'
popular:
type: array
items:
$ref: '#/components/schemas/ModDto'
recentlyUpdated:
type: array
items:
$ref: '#/components/schemas/ModDto'
ApiResponseOfListOfModDto2:
type: object
additionalProperties: false
properties:
data:
type: array
description: The response data
items:
$ref: '#/components/schemas/ModDto2'
AppHighlightsResponse2:
allOf:
- $ref: '#/components/schemas/AppHighlightsResponseBase'
- type: object
additionalProperties: false
properties:
shelves:
type: array
items:
$ref: '#/components/schemas/GameShelf2'
FileDependency:
type: object
additionalProperties: false
properties:
modId:
type: integer
format: int32
relationType:
$ref: '#/components/schemas/FileRelationType'
GalleryItem:
type: object
additionalProperties: false
properties:
description:
type: string
isFeatured:
type: boolean
displayIndex:
type:
- integer
- 'null'
format: int32
title:
type: string
url:
type: string
thumbnailUrl:
type: string
type:
$ref: '#/components/schemas/GalleryItemType'
Mod:
type: object
additionalProperties: false
properties:
id:
type: integer
description: The mod id
format: int32
gameId:
type: integer
description: The game id this mod is for
format: int32
name:
type: string
description: The name of the mod
slug:
type: string
description: The mod slug that would appear in the URL
links:
description: Relevant links for the mod such as Issue tracker and Wiki
$ref: '#/components/schemas/ModLinks'
summary:
type: string
description: Mod summary
status:
description: Current mod status
$ref: '#/components/schemas/ModStatus'
downloadCount:
type: integer
description: Number of downloads for the mod
format: int64
isFeatured:
type: boolean
description: Whether the mod is included in the featured mods list
primaryCategoryId:
type: integer
description: The main category of the mod as it was chosen by the mod author
format: int32
categories:
type: array
description: List of categories that this mod is related to
items:
$ref: '#/components/schemas/Category'
classId:
type:
- integer
- 'null'
description: The class id this mod belongs to
format: int32
authors:
type: array
description: List of the mod's authors
items:
$ref: '#/components/schemas/ModAuthor'
logo:
description: The mod's logo asset
$ref: '#/components/schemas/ModAsset'
screenshots:
type: array
description: List of screenshots assets
items:
$ref: '#/components/schemas/ModAsset'
videos:
type: array
description: List of videos assets
items:
$ref: '#/components/schemas/ModAsset'
mainFileId:
type: integer
description: The id of the main file of the mod
format: int32
latestFiles:
type: array
description: List of latest files of the mod
items:
$ref: '#/components/schemas/File'
latestFilesIndexes:
type: array
description: List of file related details for the latest files of the mod
items:
$ref: '#/components/schemas/FileIndex'
latestEarlyAccessFilesIndexes:
type: array
description: List of file related details for the latest early access files of the mod
items:
$ref: '#/components/schemas/FileIndex'
dateCreated:
type: string
description: The creation date of the mod
format: date-time
dateModified:
type: string
description: The last time the mod was modified
format: date-time
dateReleased:
type: string
description: The release date of the mod
format: date-time
dateLastReleasedFile:
type:
- string
- 'null'
description: The last file release date
format: date-time
allowModDistribution:
type:
- boolean
- 'null'
description: Is mod allowed to be distributed
gamePopularityRank:
type: integer
description: The mod popularity rank for the game
format: int32
isAvailable:
type: boolean
description: Is the mod available for search. This can be false when a mod is experimental, in a deleted state or has only alpha files
hasCommentsEnabled:
type:
- boolean
- 'null'
description: Does the mod enable comments
thumbsUpCount:
type: integer
description: The mod's thumbs up count
format: int32
ratingDetails:
description: The mod's Rating Details
$ref: '#/components/schemas/RatingDetails'
serverAffiliation:
description: The mod's server affiliation details
$ref: '#/components/schemas/ServerAffiliation'
socialLinks:
type: array
description: The mod's social links
items:
$ref: '#/components/schemas/SocialLink'
galleryItems:
type: array
description: The mod's gallery items
items:
$ref: '#/components/schemas/GalleryItem'
featuredProjectTag:
$ref: '#/components/schemas/ClientFeaturedProjectTag'
ModAsset:
type: object
additionalProperties: false
properties:
id:
type: integer
format: int32
modId:
type: integer
format: int32
title:
type: string
description:
type: string
thumbnailUrl:
type: string
url:
type: string
AppCarouselItem:
type: object
additionalProperties: false
properties:
title:
type: string
youtubeVideoid:
type: string
description:
type: string
primaryButtonTitle:
type: string
primaryButtonUrl:
type: string
format: uri
secondaryButtonTitle:
type: string
secondaryButtonUrl:
type: string
backgroundImage:
type: string
format: uri
ModLoaderType:
type: integer
description: '0 = Any
1 = Forge
2 = Cauldron
3 = LiteLoader
4 = Fabric
5 = Quilt
6 = NeoForge'
x-enumNames:
- Any
- Forge
- Cauldron
- LiteLoader
- Fabric
- Quilt
- NeoForge
enum:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
ThemePage:
type: object
additionalProperties: false
properties:
id:
type: integer
format: int32
mainTitle:
type: string
subTitle:
type: string
bannerUrl:
type: string
modIds:
type: array
items:
type: integer
format: int32
DestinationType:
type: integer
description: '1 = Mod
2 = Themepage'
x-enumNames:
- Mod
- Themepage
enum:
- 1
- 2
ModAuthor:
type: object
additionalProperties: false
properties:
id:
type: integer
format: int32
name:
type: string
url:
type: string
avatarUrl:
type: string
ApiResponseOfFeaturedModsResponseOfModDto2:
type: object
additionalProperties: false
properties:
data:
description: The response data
$ref: '#/components/schemas/FeaturedModsResponseOfModDto2'
RatingScore:
type: integer
description: '0 = NotEnoughReviews
1 = OverwhelminglyPositive
2 = VeryPositive
3 = Positive
4 = MostlyPositive
5 = Mixed
6 = MostlyNegative
7 = Negative
8 = VeryNegative
9 = OverwhelminglyNegative'
x-enumNames:
- NotEnoughReviews
- OverwhelminglyPositive
- VeryPositive
- Positive
- MostlyPo
# --- truncated at 32 KB (65 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/curse/refs/heads/main/openapi/curse-mods-api-openapi.yml