openapi: 3.0.0 info: title: CurseForge Core Categories Subscriptions 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: Subscriptions paths: /v1/users/me/mods/subscriptions: get: tags: - Subscriptions description: Get the current user's subscribed mods for the given game key operationId: Get Mods Subscriptions parameters: - 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: 1 - 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: 2 - name: gameId in: query schema: type: integer format: int32 nullable: true x-position: 3 responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Search Mods Response' '500': description: '' '403': description: '' '405': description: '' /v1/users/me/mods/subscriptions/ids: get: tags: - Subscriptions description: Get the current user's subscribed mods for the given game key operationId: Get Mods Subscriptions2 parameters: - 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: 1 - 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: 2 - name: gameId in: query schema: type: integer format: int32 nullable: true x-position: 3 responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Search Mods Response' '500': description: '' '403': description: '' '405': description: '' /v1/users/me/mods/subscriptions/subscribe: post: tags: - Subscriptions summary: '' operationId: Add a list of mod ids to the user's subscribed mods requestBody: x-name: request content: application/json: schema: $ref: '#/components/schemas/SubscribeModIdsRequestBody' required: true x-position: 1 responses: '500': description: '' '400': description: '' /v1/users/me/mods/subscriptions/subscribe/{modId}: post: tags: - Subscriptions summary: '' operationId: Add a mod id to the user's subscribed mods parameters: - name: modId in: path required: true schema: type: integer format: int32 x-position: 1 responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Get Mod Response' '500': description: '' '403': description: '' '405': description: '' '404': description: '' '400': description: '' /v1/users/me/mods/subscriptions/unsubscribe/{modId}: post: tags: - Subscriptions summary: '' operationId: Remove a mod id from the user's subscribed mods parameters: - name: modId in: path required: true schema: type: integer format: int32 x-position: 1 responses: '200': description: '' content: application/octet-stream: schema: type: string format: binary '500': description: '' '403': description: '' '405': description: '' components: schemas: File: type: object additionalProperties: false properties: id: type: integer description: The file id format: int32 gameId: type: integer description: The game id related to the mod that this file belongs to format: int32 modId: type: integer description: The mod id format: int32 isAvailable: type: boolean description: Whether the file is available to download displayName: type: string description: Display name of the file fileName: type: string description: Exact file name releaseType: description: The file release type $ref: '#/components/schemas/FileReleaseType' fileStatus: description: Status of the file $ref: '#/components/schemas/FileStatus' hashes: type: array description: The file hash (i.e. md5 or sha1) items: $ref: '#/components/schemas/FileHash' fileDate: type: string description: The file timestamp format: date-time fileLength: type: integer description: The file length in bytes format: int64 downloadCount: type: integer description: The number of downloads for the file format: int64 fileSizeOnDisk: type: integer description: The file's size on disk format: int64 nullable: true downloadUrl: type: string description: The file download URL gameVersions: type: array description: List of game versions this file is relevant for items: type: string sortableGameVersions: type: array description: Metadata used for sorting by game versions items: $ref: '#/components/schemas/SortableGameVersion' dependencies: type: array description: List of dependencies files items: $ref: '#/components/schemas/FileDependency' exposeAsAlternative: type: boolean nullable: true parentProjectFileId: type: integer format: int32 nullable: true alternateFileId: type: integer format: int32 nullable: true isServerPack: type: boolean nullable: true serverPackFileId: type: integer format: int32 nullable: true isEarlyAccessContent: type: boolean nullable: true earlyAccessEndDate: type: string format: date-time nullable: true fileFingerprint: type: integer format: int64 modules: type: array items: $ref: '#/components/schemas/FileModule' cookingInfo: $ref: '#/components/schemas/CookerInfo' ModLinks: type: object additionalProperties: false properties: websiteUrl: type: string wikiUrl: type: string issuesUrl: type: string sourceUrl: type: string RatingDetails: type: object additionalProperties: false properties: rating: type: number format: decimal nullable: true totalRatings: type: integer format: int32 nullable: true positiveRatings: type: integer format: int32 nullable: true score: $ref: '#/components/schemas/RatingScore' FileHash: type: object additionalProperties: false properties: value: type: string algo: $ref: '#/components/schemas/HashAlgo' 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 - MostlyPositive - Mixed - MostlyNegative - Negative - VeryNegative - OverwhelminglyNegative enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 SubscribeModIdsRequestBody: type: object additionalProperties: false properties: modIds: type: array items: type: integer format: int32 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 description: The class id this mod belongs to format: int32 nullable: true 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 description: The last file release date format: date-time nullable: true allowModDistribution: type: boolean description: Is mod allowed to be distributed nullable: true 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 description: Does the mod enable comments nullable: true 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' ModAuthor: type: object additionalProperties: false properties: id: type: integer format: int32 name: type: string url: type: string avatarUrl: type: string SocialLinkType: type: integer description: '1 = Mastodon 2 = Discord 3 = Website 4 = Facebook 5 = Twitter 6 = Instagram 7 = Patreon 8 = Twitch 9 = Reddit 10 = Youtube 11 = TikTok 12 = Pinterest 13 = Github 14 = Bsky 15 = Paypal 16 = PaypalHosted 17 = GithubSponsors 18 = Kofi 19 = BuyMeACoffee' x-enumNames: - Mastodon - Discord - Website - Facebook - Twitter - Instagram - Patreon - Twitch - Reddit - Youtube - TikTok - Pinterest - Github - Bsky - Paypal - PaypalHosted - GithubSponsors - Kofi - BuyMeACoffee enum: - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 FileModule: type: object additionalProperties: false properties: name: type: string fingerprint: type: integer format: int64 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 HashAlgo: type: integer description: '1 = Sha1 2 = Md5' x-enumNames: - Sha1 - Md5 enum: - 1 - 2 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' Pagination: type: object additionalProperties: false properties: index: type: integer description: A zero based index of the first item that is included in the response format: int32 pageSize: type: integer description: The requested number of items to be included in the response format: int32 resultCount: type: integer description: The actual number of items that were included in the response format: int32 totalCount: type: integer description: The total number of items available by the request format: int64 FileIndex: type: object additionalProperties: false properties: gameVersion: type: string fileId: type: integer format: int32 filename: type: string releaseType: $ref: '#/components/schemas/FileReleaseType' gameVersionTypeId: type: integer format: int32 nullable: true modLoader: nullable: true $ref: '#/components/schemas/ModLoaderType' SortableGameVersion: type: object additionalProperties: false properties: gameVersionName: type: string description: Original version name (e.g. 1.5b) gameVersionPadded: type: string description: Used for sorting (e.g. 0000000001.0000000005) gameVersion: type: string description: game version clean name (e.g. 1.5) gameVersionReleaseDate: type: string description: Game version release date format: date-time gameVersionTypeId: type: integer description: Game version type id format: int32 nullable: true 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 CookerInfo: type: object additionalProperties: false properties: cookerVersion: type: string cookerRevision: type: string AffiliationServiceType: type: integer description: 1 = Bisect x-enumNames: - Bisect enum: - 1 FileStatus: type: integer description: '1 = Processing 2 = ChangesRequired 3 = UnderReview 4 = Approved 5 = Rejected 6 = MalwareDetected 7 = Deleted 8 = Archived 9 = Testing 10 = Released 11 = ReadyForReview 12 = Deprecated 13 = Baking 14 = AwaitingPublishing 15 = FailedPublishing' x-enumNames: - Processing - ChangesRequired - UnderReview - Approved - Rejected - MalwareDetected - Deleted - Archived - Testing - Released - ReadyForReview - Deprecated - Baking - AwaitingPublishing - FailedPublishing enum: - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 Category: type: object additionalProperties: false properties: id: type: integer description: The category id format: int32 gameId: type: integer description: The game id related to the category format: int32 name: type: string description: Category name slug: type: string description: The category slug as it appear in the URL url: type: string description: The category URL iconUrl: type: string description: URL for the category icon dateModified: type: string description: Last modified date of the category format: date-time isClass: type: boolean description: A top level category for other categories nullable: true classId: type: integer description: The class id of the category, meaning - the class of which this category is under format: int32 nullable: true parentCategoryId: type: integer description: The parent category for this category format: int32 nullable: true displayIndex: type: integer description: The display index for this category format: int32 nullable: true FileReleaseType: type: integer description: '1 = Release 2 = Beta 3 = Alpha' x-enumNames: - Release - Beta - Alpha enum: - 1 - 2 - 3 GalleryItemType: type: integer description: '0 = None 1 = Screenshot 2 = EmbeddedVideo' x-enumNames: - None - Screenshot - EmbeddedVideo enum: - 0 - 1 - 2 ServerAffiliation: type: object additionalProperties: false properties: isEnabled: type: boolean isDefaultBanner: type: boolean hasDiscount: type: boolean affiliationService: $ref: '#/components/schemas/AffiliationServiceType' defaultBannerCustomTitle: type: string customImageUrl: type: string affiliationLink: type: string SocialLink: type: object additionalProperties: false properties: type: $ref: '#/components/schemas/SocialLinkType' url: type: string ModStatus: type: integer description: '1 = New 2 = ChangesRequired 3 = UnderSoftReview 4 = Approved 5 = Rejected 6 = ChangesMade 7 = Inactive 8 = Abandoned 9 = Deleted 10 = UnderReview' x-enumNames: - New - ChangesRequired - UnderSoftReview - Approved - Rejected - ChangesMade - Inactive - Abandoned - Deleted - UnderReview enum: - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 ClientFeaturedProjectTag: type: integer description: '0 = None 1 = Sponsored 2 = HiddenGem 3 = Popular' x-enumNames: - None - Sponsored - HiddenGem - Popular enum: - 0 - 1 - 2 - 3 GalleryItem: type: object additionalProperties: false properties: description: type: string isFeatured: type: boolean displayIndex: type: integer format: int32 nullable: true title: type: string url: type: string thumbnailUrl: type: string type: $ref: '#/components/schemas/GalleryItemType' FileDependency: type: object additionalProperties: false properties: modId: type: integer format: int32 relationType: $ref: '#/components/schemas/FileRelationType' 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 Get Mod Response: type: object additionalProperties: false properties: data: description: The response data $ref: '#/components/schemas/Mod' securitySchemes: API_KEY: type: apiKey description:
The API key can be generated in the CurseForge for Studios [developer console](https://console.curseforge.com/). name: x-api-key in: header x-generator: NSwag v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v11.0.0.0))