MENU navbar-image

Introduction

The greatest resource available for Single Player Tarkov modifications. Where modding legends are made. Discover powerful tools, expert-written guides, and exclusive mods. Craft your vision. Transform the game.

The Forge API is open and read-only. Every endpoint is publicly accessible and requires no authentication or API key.

As you scroll, you will see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile). You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).

Rate Limits

The Forge API is rate limited at Cloudflare's edge, applied per client IP across all /api/v0/ endpoints. There are two windows:

Window Limit Block duration
Burst 40 requests / 10 seconds 30 seconds
Sustained 200 requests / 60 seconds 60 seconds

When either limit is exceeded, the API responds with HTTP 429 Too Many Requests. The response carries a Retry-After header (the number of seconds to wait before retrying) and this example JSON body.

{
    "success": false,
    "code": "RATE_LIMITED",
    "message": "Too many requests. Retry after the number of seconds in the Retry-After header."
}

Honour the Retry-After header and back-off before retrying. Program against the 429 status and the Retry-After header rather than the specific numbers above, which may be tuned over time for any reason.

Attempting to sidestep or evade these limits will be seen as an act of hostility. If you require a higher rate limit then what is provided above please contact us on Discord to discuss specifics.

General

APIs for general application status and information.

Check API Health

Returns a simple 'pong' message to indicate that the API endpoint is available and responding correctly. This endpoint is typically used for health checks or basic connectivity tests.

It does not require authentication.

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/ping" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/ping"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/ping';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/ping'
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Successful Ping):


{
    "success": true,
    "data": {
        "message": "pong"
    }
}
 

Request      

GET api/v0/ping

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Mods

Endpoints for managing and retrieving mods.

Get Mods

Retrieves a paginated list of mods, allowing filtering, sorting, and relationship inclusion.

Fields available:
hub_id, guid, name, slug, teaser, thumbnail, downloads, favourites_count, detail_url, fika_compatibility, featured, contains_ai_content, contains_ads, shows_profile_binding_notice, category_id, published_at, created_at, updated_at

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/mods?fields=name%2Cslug%2Cfeatured%2Ccreated_at&filter%5Bid%5D=1%2C5%2C10&filter%5Bhub_id%5D=123%2C456&filter%5Bguid%5D=com.example.mymod1%2Ccom.example.mymod2&filter%5Bname%5D=Raid+Time&filter%5Bslug%5D=some-mod&filter%5Bteaser%5D=important&filter%5Bfeatured%5D=true&filter%5Bcontains_ads%5D=false&filter%5Bcontains_ai_content%5D=false&filter%5Bcategory_id%5D=1%2C2%2C3&filter%5Bcategory_slug%5D=weapons%2Cgear&filter%5Bcreated_between%5D=2025-01-01%2C2025-03-31&filter%5Bupdated_between%5D=2025-01-01%2C2025-03-31&filter%5Bpublished_between%5D=2025-01-01%2C2025-03-31&filter%5Bspt_version%5D=%5E3.8.0&filter%5Bfika_compatibility%5D=true&filter%5Binclude_legacy%5D=true&query=raid+time&include=versions%2Ccategory&sort=featured%2C-name&page=2&per_page=25" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/mods"
);

const params = {
    "fields": "name,slug,featured,created_at",
    "filter[id]": "1,5,10",
    "filter[hub_id]": "123,456",
    "filter[guid]": "com.example.mymod1,com.example.mymod2",
    "filter[name]": "Raid Time",
    "filter[slug]": "some-mod",
    "filter[teaser]": "important",
    "filter[featured]": "true",
    "filter[contains_ads]": "false",
    "filter[contains_ai_content]": "false",
    "filter[category_id]": "1,2,3",
    "filter[category_slug]": "weapons,gear",
    "filter[created_between]": "2025-01-01,2025-03-31",
    "filter[updated_between]": "2025-01-01,2025-03-31",
    "filter[published_between]": "2025-01-01,2025-03-31",
    "filter[spt_version]": "^3.8.0",
    "filter[fika_compatibility]": "true",
    "filter[include_legacy]": "true",
    "query": "raid time",
    "include": "versions,category",
    "sort": "featured,-name",
    "page": "2",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/mods';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'name,slug,featured,created_at',
            'filter[id]' => '1,5,10',
            'filter[hub_id]' => '123,456',
            'filter[guid]' => 'com.example.mymod1,com.example.mymod2',
            'filter[name]' => 'Raid Time',
            'filter[slug]' => 'some-mod',
            'filter[teaser]' => 'important',
            'filter[featured]' => 'true',
            'filter[contains_ads]' => 'false',
            'filter[contains_ai_content]' => 'false',
            'filter[category_id]' => '1,2,3',
            'filter[category_slug]' => 'weapons,gear',
            'filter[created_between]' => '2025-01-01,2025-03-31',
            'filter[updated_between]' => '2025-01-01,2025-03-31',
            'filter[published_between]' => '2025-01-01,2025-03-31',
            'filter[spt_version]' => '^3.8.0',
            'filter[fika_compatibility]' => 'true',
            'filter[include_legacy]' => 'true',
            'query' => 'raid time',
            'include' => 'versions,category',
            'sort' => 'featured,-name',
            'page' => '2',
            'per_page' => '25',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/mods'
params = {
  'fields': 'name,slug,featured,created_at',
  'filter[id]': '1,5,10',
  'filter[hub_id]': '123,456',
  'filter[guid]': 'com.example.mymod1,com.example.mymod2',
  'filter[name]': 'Raid Time',
  'filter[slug]': 'some-mod',
  'filter[teaser]': 'important',
  'filter[featured]': 'true',
  'filter[contains_ads]': 'false',
  'filter[contains_ai_content]': 'false',
  'filter[category_id]': '1,2,3',
  'filter[category_slug]': 'weapons,gear',
  'filter[created_between]': '2025-01-01,2025-03-31',
  'filter[updated_between]': '2025-01-01,2025-03-31',
  'filter[published_between]': '2025-01-01,2025-03-31',
  'filter[spt_version]': '^3.8.0',
  'filter[fika_compatibility]': 'true',
  'filter[include_legacy]': 'true',
  'query': 'raid time',
  'include': 'versions,category',
  'sort': 'featured,-name',
  'page': '2',
  'per_page': '25',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success (All fields)):


{
    "success": true,
    "data": [
        {
            "id": 1,
            "hub_id": null,
            "guid": "com.oconnell.recusandae-velit-incidunt",
            "name": "Recusandae velit incidunt.",
            "slug": "recusandae-velit-incidunt",
            "teaser": "Minus est minima quibusdam necessitatibus inventore iste.",
            "thumbnail": "",
            "downloads": 55212644,
            "favourites_count": 1245,
            "owner": {
                "id": 1,
                "name": "ModAuthor",
                "profile_photo_url": "https://example.com/profile.jpg",
                "cover_photo_url": "https://example.com/cover.jpg"
            },
            "additional_authors": [],
            "source_code_links": [
                {
                    "url": "http://oconnell.com/earum-sed-fugit-corrupti",
                    "label": null
                }
            ],
            "detail_url": "https://forge.sp-tarkov.com/mods/1/recusandae-velit-incidunt",
            "fika_compatibility": true,
            "featured": true,
            "contains_ads": true,
            "contains_ai_content": false,
            "shows_profile_binding_notice": false,
            "published_at": "2025-01-09T17:48:53.000000Z",
            "created_at": "2024-12-11T14:48:53.000000Z",
            "updated_at": "2025-04-10T13:50:00.000000Z"
        },
        {
            "id": 2,
            "hub_id": null,
            "guid": "com.baumbach.adipisci-iusto-voluptas-nihil",
            "name": "Adipisci iusto voluptas nihil.",
            "slug": "adipisci-iusto-voluptas-nihil",
            "teaser": "Minima adipisci perspiciatis nemo maiores rem porro natus.",
            "thumbnail": "",
            "downloads": 219598104,
            "favourites_count": 873,
            "owner": {
                "id": 2,
                "name": "AnotherAuthor",
                "profile_photo_url": "https://example.com/profile2.jpg",
                "cover_photo_url": "https://example.com/cover2.jpg"
            },
            "additional_authors": [],
            "source_code_links": [
                {
                    "url": "http://baumbach.net/",
                    "label": null
                }
            ],
            "detail_url": "https://forge.sp-tarkov.com/mods/2/adipisci-iusto-voluptas-nihil",
            "fika_compatibility": false,
            "featured": false,
            "contains_ads": true,
            "contains_ai_content": true,
            "shows_profile_binding_notice": false,
            "published_at": "2024-08-30T14:48:53.000000Z",
            "created_at": "2024-06-22T04:48:53.000000Z",
            "updated_at": "2025-04-10T13:50:21.000000Z"
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/mods?page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/mods?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/mods?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/mods",
        "per_page": 12,
        "to": 2,
        "total": 2
    }
}
 

Example response (200, Success (Include Category)):


{
    "success": true,
    "data": [
        {
            "id": 1,
            "hub_id": null,
            "guid": "com.oconnell.recusandae-velit-incidunt",
            "name": "Recusandae velit incidunt.",
            "slug": "recusandae-velit-incidunt",
            "teaser": "Minus est minima quibusdam necessitatibus inventore iste.",
            "thumbnail": "",
            "downloads": 55212644,
            "favourites_count": 1245,
            "owner": {
                "id": 1,
                "name": "ModAuthor",
                "profile_photo_url": "https://example.com/profile.jpg",
                "cover_photo_url": "https://example.com/cover.jpg"
            },
            "additional_authors": [],
            "source_code_links": [
                {
                    "url": "http://oconnell.com/earum-sed-fugit-corrupti",
                    "label": null
                }
            ],
            "category": {
                "id": 1,
                "name": "Gameplay",
                "slug": "gameplay",
                "color_class": "blue"
            },
            "detail_url": "https://forge.sp-tarkov.com/mods/1/recusandae-velit-incidunt",
            "fika_compatibility": true,
            "featured": true,
            "contains_ads": true,
            "contains_ai_content": false,
            "shows_profile_binding_notice": false,
            "published_at": "2025-01-09T17:48:53.000000Z",
            "created_at": "2024-12-11T14:48:53.000000Z",
            "updated_at": "2025-04-10T13:50:00.000000Z"
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/mods?include=category&page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/mods?include=category&page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/mods?include=category&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/mods",
        "per_page": 12,
        "to": 1,
        "total": 1
    }
}
 

Example response (200, Success (Include Versions and License)):


{
    "success": true,
    "data": [
        {
            "id": 1,
            "hub_id": null,
            "guid": "com.oconnell.recusandae-velit-incidunt",
            "name": "Recusandae velit incidunt.",
            "slug": "recusandae-velit-incidunt",
            "teaser": "Minus est minima quibusdam necessitatibus inventore iste.",
            "thumbnail": "",
            "downloads": 55212644,
            "favourites_count": 1245,
            "owner": {
                "id": 1,
                "name": "ModAuthor",
                "profile_photo_url": "https://example.com/profile.jpg",
                "cover_photo_url": "https://example.com/cover.jpg"
            },
            "additional_authors": [],
            "source_code_links": [
                {
                    "url": "http://oconnell.com/earum-sed-fugit-corrupti",
                    "label": null
                }
            ],
            "detail_url": "https://forge.sp-tarkov.com/mods/1/recusandae-velit-incidunt",
            "fika_compatibility": true,
            "featured": true,
            "contains_ads": true,
            "contains_ai_content": false,
            "shows_profile_binding_notice": false,
            "versions": [
                {
                    "id": 1,
                    "version": "1.2.3",
                    "spt_version_constraint": "^3.8.0",
                    "downloads": 1523,
                    "published_at": "2025-01-09T17:48:53.000000Z"
                },
                {
                    "id": 2,
                    "version": "1.2.2",
                    "spt_version_constraint": "^3.8.0",
                    "downloads": 892,
                    "published_at": "2025-01-05T12:30:00.000000Z"
                }
            ],
            "license": {
                "id": 1,
                "name": "MIT",
                "short_name": "MIT"
            },
            "published_at": "2025-01-09T17:48:53.000000Z",
            "created_at": "2024-12-11T14:48:53.000000Z",
            "updated_at": "2025-04-10T13:50:00.000000Z"
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/mods?include=versions,license&page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/mods?include=versions,license&page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/mods?include=versions,license&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/mods",
        "per_page": 12,
        "to": 1,
        "total": 1
    }
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/mods

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: name,slug,featured,created_at

filter[id]   string  optional    

Filter by comma-separated Mod IDs. Example: 1,5,10

filter[hub_id]   string  optional    

Filter by comma-separated Hub IDs. Example: 123,456

filter[guid]   string  optional    

Filter by comma-separated GUIDs. Matching is case-insensitive. Example: com.example.mymod1,com.example.mymod2

filter[name]   string  optional    

Filter by name (fuzzy filter). Example: Raid Time

filter[slug]   string  optional    

Filter by slug (fuzzy filter). Example: some-mod

filter[teaser]   string  optional    

Filter by teaser text (fuzzy filter). Example: important

filter[featured]   string  optional    

Filter by featured status (1, true, 0, false). Example: true

filter[contains_ads]   string  optional    

Filter by contains_ads status (1, true, 0, false). Example: false

filter[contains_ai_content]   string  optional    

Filter by contains_ai_content status (1, true, 0, false). Example: false

filter[category_id]   string  optional    

Filter by comma-separated category IDs. Example: 1,2,3

filter[category_slug]   string  optional    

Filter by comma-separated category slugs. Example: weapons,gear

filter[created_between]   string  optional    

Filter by creation date range (YYYY-MM-DD,YYYY-MM-DD). Example: 2025-01-01,2025-03-31

filter[updated_between]   string  optional    

Filter by update date range (YYYY-MM-DD,YYYY-MM-DD). Example: 2025-01-01,2025-03-31

filter[published_between]   string  optional    

Filter by publication date range (YYYY-MM-DD,YYYY-MM-DD). Example: 2025-01-01,2025-03-31

filter[spt_version]   string  optional    

Filter mods that are compatible with an SPT version SemVer constraint. This will only filter the mods, not the mod versions. Example: ^3.8.0

filter[fika_compatibility]   string  optional    

Filter by Fika compatibility status. When true, only shows mods with Fika compatible versions (1, true, 0, false). Example: true

filter[include_legacy]   string  optional    

Include legacy mods (mods with versions that have no SPT version constraint). By default, legacy mods are excluded from results (1, true, 0, false). Example: true

query   string  optional    

Search query to filter mods using Meilisearch. This will search across name, slug, and description fields. Example: raid time

include   string  optional    

Comma-separated list of relationships. Available: versions, license, category, source_code_links. Example: versions,category

sort   string  optional    

Sort results by attribute(s). Default ASC. Prefix with - for DESC. Comma-separate multiple fields. Allowed: name, downloads, favourites_count, featured, created_at, updated_at, published_at. Example: featured,-name

page   integer  optional    

The page number for pagination. Example: 2

per_page   integer  optional    

The number of results per page (max 50). Example: 25

Get Mod Details

Retrieves details for a single mod, allowing relationship inclusion.

Fields available:
hub_id, guid, name, slug, teaser, description, thumbnail, downloads, favourites_count, detail_url, fika_compatibility, featured, contains_ai_content, custom_ai_disclosure, contains_ads, shows_profile_binding_notice, published_at, created_at, updated_at

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/mod/0?fields=name%2Cslug%2Cfeatured%2Ccreated_at&include=versions%2Clicense" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/mod/0"
);

const params = {
    "fields": "name,slug,featured,created_at",
    "include": "versions,license",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/mod/0';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'name,slug,featured,created_at',
            'include' => 'versions,license',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/mod/0'
params = {
  'fields': 'name,slug,featured,created_at',
  'include': 'versions,license',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success (All fields, No Includes)):


{
    "success": true,
    "data": {
        "id": 2,
        "hub_id": null,
        "guid": "com.baumbach.adipisci-iusto-voluptas-nihil",
        "name": "Adipisci iusto voluptas nihil.",
        "slug": "adipisci-iusto-voluptas-nihil",
        "teaser": "Minima adipisci perspiciatis nemo maiores rem porro natus.",
        "thumbnail": "",
        "downloads": 219598104,
        "favourites_count": 873,
        "description": "Adipisci rerum minima maiores sed. Neque totam quia libero exercitationem ullam.",
        "owner": {
            "id": 1,
            "name": "ModOwner",
            "profile_photo_url": "https://example.com/owner.jpg",
            "cover_photo_url": "https://example.com/owner-cover.jpg"
        },
        "additional_authors": [],
        "source_code_links": [
            {
                "url": "http://baumbach.net/",
                "label": null
            }
        ],
        "detail_url": "https://forge.sp-tarkov.com/mods/2/adipisci-iusto-voluptas-nihil",
        "fika_compatibility": true,
        "featured": false,
        "contains_ads": true,
        "contains_ai_content": true,
        "custom_ai_disclosure": "<p>AI tools were used to generate placeholder item icons and textures.</p>",
        "shows_profile_binding_notice": false,
        "published_at": "2024-08-30T14:48:53.000000Z",
        "created_at": "2024-06-22T04:48:53.000000Z",
        "updated_at": "2025-04-10T13:50:21.000000Z"
    }
}
 

Example response (200, Success (Include License)):


{
    "success": true,
    "data": {
        "id": 2,
        "hub_id": null,
        "guid": "com.baumbach.adipisci-iusto-voluptas-nihil",
        "name": "Adipisci iusto voluptas nihil.",
        "slug": "adipisci-iusto-voluptas-nihil",
        "teaser": "Minima adipisci perspiciatis nemo maiores rem porro natus.",
        "thumbnail": "",
        "downloads": 219598104,
        "favourites_count": 873,
        "description": "Adipisci rerum minima maiores sed. Neque totam quia libero exercitationem ullam.",
        "owner": {
            "id": 1,
            "name": "ModOwner",
            "profile_photo_url": "https://example.com/owner.jpg",
            "cover_photo_url": "https://example.com/owner-cover.jpg"
        },
        "additional_authors": [
            {
                "id": 5,
                "name": "ContributorOne",
                "profile_photo_url": "https://example.com/contributor1.jpg",
                "cover_photo_url": "https://example.com/cover1.jpg"
            },
            {
                "id": 8,
                "name": "ContributorTwo",
                "profile_photo_url": "https://example.com/contributor2.jpg",
                "cover_photo_url": "https://example.com/cover2.jpg"
            }
        ],
        "source_code_links": [
            {
                "url": "http://baumbach.net/",
                "label": null
            }
        ],
        "detail_url": "https://forge.sp-tarkov.com/mods/2/adipisci-iusto-voluptas-nihil",
        "fika_compatibility": true,
        "featured": false,
        "contains_ads": true,
        "contains_ai_content": true,
        "custom_ai_disclosure": "<p>AI tools were used to generate placeholder item icons and textures.</p>",
        "shows_profile_binding_notice": false,
        "license": {
            "id": 2,
            "name": "GNU General Public License v3.0",
            "short_name": "GPL-3.0"
        },
        "published_at": "2024-08-30T14:48:53.000000Z",
        "created_at": "2024-06-22T04:48:53.000000Z",
        "updated_at": "2025-04-10T13:50:21.000000Z"
    }
}
 

Example response (200, Success (Include Versions, License, and Category)):


{
    "success": true,
    "data": {
        "id": 2,
        "hub_id": null,
        "guid": "com.baumbach.adipisci-iusto-voluptas-nihil",
        "name": "Adipisci iusto voluptas nihil.",
        "slug": "adipisci-iusto-voluptas-nihil",
        "teaser": "Minima adipisci perspiciatis nemo maiores rem porro natus.",
        "thumbnail": "",
        "downloads": 219598104,
        "favourites_count": 873,
        "description": "Adipisci rerum minima maiores sed. Neque totam quia libero exercitationem ullam.",
        "source_code_links": [
            {
                "url": "http://baumbach.net/",
                "label": null
            }
        ],
        "detail_url": "https://forge.sp-tarkov.com/mods/2/adipisci-iusto-voluptas-nihil",
        "fika_compatibility": true,
        "featured": false,
        "contains_ads": true,
        "contains_ai_content": true,
        "custom_ai_disclosure": "<p>AI tools were used to generate placeholder item icons and textures.</p>",
        "shows_profile_binding_notice": false,
        "owner": {
            "id": 1,
            "name": "ModOwner",
            "profile_photo_url": "https://example.com/owner.jpg",
            "cover_photo_url": "https://example.com/owner-cover.jpg"
        },
        "additional_authors": [
            {
                "id": 5,
                "name": "ContributorOne",
                "profile_photo_url": "https://example.com/contributor1.jpg",
                "cover_photo_url": "https://example.com/cover1.jpg"
            }
        ],
        "versions": [
            {
                "id": 45,
                "version": "2.1.0",
                "spt_version_constraint": "^3.9.0",
                "downloads": 5234,
                "published_at": "2025-02-15T10:30:00.000000Z"
            },
            {
                "id": 44,
                "version": "2.0.5",
                "spt_version_constraint": "^3.8.0",
                "downloads": 12456,
                "published_at": "2025-01-20T08:15:00.000000Z"
            }
        ],
        "license": {
            "id": 2,
            "name": "GNU General Public License v3.0",
            "short_name": "GPL-3.0"
        },
        "category": {
            "id": 3,
            "name": "Quality of Life",
            "slug": "quality-of-life",
            "color_class": "purple"
        },
        "published_at": "2024-08-30T14:48:53.000000Z",
        "created_at": "2024-06-22T04:48:53.000000Z",
        "updated_at": "2025-04-10T13:50:21.000000Z"
    }
}
 

Example response (404, Mod Does Not Exist):


{
    "success": false,
    "code": "NOT_FOUND",
    "message": "Resource not found."
}
 

Request      

GET api/v0/mod/{modId}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

modId   string     

Example: 0

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: name,slug,featured,created_at

include   string  optional    

Comma-separated list of relationships. Available: versions, license, category, source_code_links. Example: versions,license

Get Mod Versions

Retrieves a paginated list of mod versions, allowing filtering, sorting, and relationship inclusion.

Fields available:
hub_id, version, description, link, content_length, spt_version_constraint, downloads, fika_compatibility, published_at, created_at, updated_at

The content_length field contains the file size in bytes as determined by the Content-Length header from the download link. This field may be null for versions created before file size validation was implemented.

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/mod/0/versions?fields=id%2Cversion%2Clink%2Ccreated_at&filter%5Bid%5D=234%2C432&filter%5Bhub_id%5D=234%2C432&filter%5Bversion%5D=%5E1.0.0&filter%5Bdescription%5D=This+is+a+description&filter%5Bpublished_between%5D=2025-01-01%2C2025-03-31&filter%5Bcreated_between%5D=2025-01-01%2C2025-03-31&filter%5Bupdated_between%5D=2025-01-01%2C2025-03-31&filter%5Bspt_version%5D=%5E3.8.0&filter%5Bfika_compatibility%5D=compatible&include=dependencies%2Cvirus_total_links&sort=-version%2C-created_at&page=2&per_page=25" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/mod/0/versions"
);

const params = {
    "fields": "id,version,link,created_at",
    "filter[id]": "234,432",
    "filter[hub_id]": "234,432",
    "filter[version]": "^1.0.0",
    "filter[description]": "This is a description",
    "filter[published_between]": "2025-01-01,2025-03-31",
    "filter[created_between]": "2025-01-01,2025-03-31",
    "filter[updated_between]": "2025-01-01,2025-03-31",
    "filter[spt_version]": "^3.8.0",
    "filter[fika_compatibility]": "compatible",
    "include": "dependencies,virus_total_links",
    "sort": "-version,-created_at",
    "page": "2",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/mod/0/versions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'id,version,link,created_at',
            'filter[id]' => '234,432',
            'filter[hub_id]' => '234,432',
            'filter[version]' => '^1.0.0',
            'filter[description]' => 'This is a description',
            'filter[published_between]' => '2025-01-01,2025-03-31',
            'filter[created_between]' => '2025-01-01,2025-03-31',
            'filter[updated_between]' => '2025-01-01,2025-03-31',
            'filter[spt_version]' => '^3.8.0',
            'filter[fika_compatibility]' => 'compatible',
            'include' => 'dependencies,virus_total_links',
            'sort' => '-version,-created_at',
            'page' => '2',
            'per_page' => '25',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/mod/0/versions'
params = {
  'fields': 'id,version,link,created_at',
  'filter[id]': '234,432',
  'filter[hub_id]': '234,432',
  'filter[version]': '^1.0.0',
  'filter[description]': 'This is a description',
  'filter[published_between]': '2025-01-01,2025-03-31',
  'filter[created_between]': '2025-01-01,2025-03-31',
  'filter[updated_between]': '2025-01-01,2025-03-31',
  'filter[spt_version]': '^3.8.0',
  'filter[fika_compatibility]': 'compatible',
  'include': 'dependencies,virus_total_links',
  'sort': '-version,-created_at',
  'page': '2',
  'per_page': '25',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success (All fields, No Includes)):


{
    "success": true,
    "data": [
        {
            "id": 938,
            "hub_id": null,
            "version": "0.2.9",
            "description": "Magni eius ad temporibus similique accusamus assumenda aliquid. Quisquam placeat in necessitatibus ducimus quasi odit. Autem nulla ea minus itaque.",
            "link": "https://forge.sp-tarkov.com/mod/download/1/example-mod/0.2.9",
            "content_length": 52428800,
            "spt_version_constraint": "^1.0.0",
            "downloads": 8,
            "fika_compatibility": "unknown",
            "published_at": "2024-05-09T10:49:41.000000Z",
            "created_at": "2024-12-19T04:49:41.000000Z",
            "updated_at": "2025-02-18T11:49:41.000000Z"
        },
        {
            "id": 660,
            "hub_id": null,
            "version": "8.2.8",
            "description": "Mollitia voluptatem quia et ex aut. Qui libero tempore ut. Suscipit a eius recusandae aut pariatur soluta necessitatibus.",
            "link": "https://forge.sp-tarkov.com/mod/download/1/example-mod/8.2.8",
            "spt_version_constraint": "<4.0.0",
            "downloads": 3332503,
            "fika_compatibility": "compatible",
            "published_at": "2024-07-03T05:49:25.000000Z",
            "created_at": "2024-10-06T23:49:25.000000Z",
            "updated_at": "2024-10-15T03:49:25.000000Z"
        },
        {
            "id": 2,
            "hub_id": null,
            "version": "6.5.2",
            "description": "Consequatur modi et labore ea neque id. Natus sapiente amet rerum quia in molestiae autem. Eligendi molestiae blanditiis voluptatem earum.",
            "link": "https://forge.sp-tarkov.com/mod/download/1/example-mod/6.5.2",
            "spt_version_constraint": "<4.0.0",
            "downloads": 40217550,
            "fika_compatibility": "incompatible",
            "published_at": "2024-12-23T14:48:58.000000Z",
            "created_at": "2024-09-26T13:48:58.000000Z",
            "updated_at": "2025-03-21T01:48:58.000000Z"
        },
        {
            "id": 363,
            "hub_id": null,
            "version": "5.9.5",
            "description": "Aut ut inventore aut ex tempora a aspernatur asperiores. A laborum ullam ex rerum illo dolorem cupiditate. Veritatis id dolor qui quam et.",
            "link": "https://forge.sp-tarkov.com/mod/download/1/example-mod/5.9.5",
            "spt_version_constraint": "^1.0.0",
            "downloads": 11236658,
            "fika_compatibility": "unknown",
            "published_at": "2025-03-18T23:49:12.000000Z",
            "created_at": "2024-09-04T16:49:12.000000Z",
            "updated_at": "2024-05-26T13:49:12.000000Z"
        },
        {
            "id": 1217,
            "hub_id": null,
            "version": "2.6.8",
            "description": "Aut in rerum est labore omnis. Voluptatem est velit doloribus expedita et. Illo error ut aspernatur quia quo repellat tenetur.",
            "link": "https://forge.sp-tarkov.com/mod/download/1/example-mod/2.6.8",
            "spt_version_constraint": ">=3.0.0",
            "downloads": 425925,
            "fika_compatibility": "compatible",
            "published_at": "2025-03-20T13:50:00.000000Z",
            "created_at": "2025-02-12T01:50:00.000000Z",
            "updated_at": "2025-03-17T07:50:00.000000Z"
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/mod/1/versions?page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/mod/1/versions?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/mod/1/versions?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/mod/1/versions",
        "per_page": 12,
        "to": 5,
        "total": 5
    }
}
 

Example response (200, Success (Include Dependencies)):


{
    "success": true,
    "data": [
        {
            "id": 938,
            "hub_id": null,
            "version": "0.2.9",
            "description": "Magni eius ad temporibus similique accusamus assumenda aliquid. Quisquam placeat in necessitatibus ducimus quasi odit. Autem nulla ea minus itaque.",
            "link": "https://forge.sp-tarkov.com/mod/download/1/example-mod/0.2.9",
            "content_length": 52428800,
            "spt_version_constraint": "^1.0.0",
            "downloads": 8,
            "fika_compatibility": "unknown",
            "dependencies": [
                {
                    "id": 5,
                    "mod_id": 42,
                    "mod_guid": "com.example.core-library",
                    "mod_name": "Core Library",
                    "version_constraint": "^2.0.0",
                    "is_optional": false
                },
                {
                    "id": 8,
                    "mod_id": 15,
                    "mod_guid": "com.example.helper-utils",
                    "mod_name": "Helper Utilities",
                    "version_constraint": ">=1.5.0",
                    "is_optional": true
                }
            ],
            "published_at": "2024-05-09T10:49:41.000000Z",
            "created_at": "2024-12-19T04:49:41.000000Z",
            "updated_at": "2025-02-18T11:49:41.000000Z"
        },
        {
            "id": 660,
            "hub_id": null,
            "version": "8.2.8",
            "description": "Mollitia voluptatem quia et ex aut. Qui libero tempore ut. Suscipit a eius recusandae aut pariatur soluta necessitatibus.",
            "link": "https://forge.sp-tarkov.com/mod/download/1/example-mod/8.2.8",
            "spt_version_constraint": "<4.0.0",
            "downloads": 3332503,
            "fika_compatibility": "compatible",
            "dependencies": [],
            "published_at": "2024-07-03T05:49:25.000000Z",
            "created_at": "2024-10-06T23:49:25.000000Z",
            "updated_at": "2024-10-15T03:49:25.000000Z"
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/mod/1/versions?include=dependencies&page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/mod/1/versions?include=dependencies&page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/mod/1/versions?include=dependencies&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/mod/1/versions",
        "per_page": 12,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/mod/{modId}/versions

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

modId   string     

Example: 0

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: id,version,link,created_at

filter[id]   string  optional    

Filter by mod version ID. Comma-separated. Example: 234,432

filter[hub_id]   string  optional    

Filter by mod hub ID. Comma-separated. Example: 234,432

filter[version]   string  optional    

Filter mod versions by using a SemVer constraint. Example: ^1.0.0

filter[description]   string  optional    

Fuzzy-filter by mod version description. Example: This is a description

filter[published_between]   string  optional    

Filter by mod version published between. Example: 2025-01-01,2025-03-31

filter[created_between]   string  optional    

Filter by mod version created between. Example: 2025-01-01,2025-03-31

filter[updated_between]   string  optional    

Filter by mod version updated between. Example: 2025-01-01,2025-03-31

filter[spt_version]   string  optional    

Filter mod versions that are compatible with a SemVer constraint. Example: ^3.8.0

filter[fika_compatibility]   string  optional    

Filter by Fika compatibility status. Comma-separated. Available values: compatible, incompatible, unknown. Example: compatible

include   string  optional    

Comma-separated list of relationships. Available: dependencies, virus_total_links. Example: dependencies,virus_total_links

sort   string  optional    

Sort results by attribute(s). Default ASC. Prefix with - for DESC. Comma-separate multiple fields. Example: -version,-created_at

page   integer  optional    

The page number for pagination. Example: 2

per_page   integer  optional    

The number of results per page (max 50). Example: 25

Get Mod Updates

Checks for available updates for one or more installed mod versions, filtered by SPT version compatibility. This endpoint intelligently handles dependency constraints and prerelease versions to provide safe update recommendations.

How it works:

Prerelease Handling:

Dependency Validation:

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/mods/updates?mods=5%3A1.2.0%2Ccom.example.mod%3A2.0.5&spt_version=3.11.5" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/mods/updates"
);

const params = {
    "mods": "5:1.2.0,com.example.mod:2.0.5",
    "spt_version": "3.11.5",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/mods/updates';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'mods' => '5:1.2.0,com.example.mod:2.0.5',
            'spt_version' => '3.11.5',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/mods/updates'
params = {
  'mods': '5:1.2.0,com.example.mod:2.0.5',
  'spt_version': '3.11.5',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success):


{
    "success": true,
    "data": {
        "spt_version": "3.11.5",
        "updates": [
            {
                "current_version": {
                    "id": 42,
                    "mod_id": 5,
                    "guid": "com.example.mod",
                    "name": "Example Mod",
                    "slug": "example-mod",
                    "version": "1.0.0"
                },
                "recommended_version": {
                    "id": 58,
                    "version": "1.5.0",
                    "link": "https://forge.sp-tarkov.com/mod/download/5/example-mod/1.5.0",
                    "content_length": 1048576,
                    "fika_compatibility": "compatible",
                    "spt_versions": [
                        "3.11.0",
                        "3.11.5"
                    ]
                },
                "update_reason": "newer_version_available"
            }
        ],
        "blocked_updates": [
            {
                "current_version": {
                    "id": 99,
                    "mod_id": 20,
                    "guid": "com.example.blocked",
                    "name": "Blocked Mod",
                    "version": "2.0.0"
                },
                "latest_version": {
                    "id": 105,
                    "version": "3.0.0",
                    "spt_versions": [
                        "3.11.5"
                    ]
                },
                "block_reason": "dependency_constraint_violation",
                "blocking_mods": [
                    {
                        "mod_id": 15,
                        "mod_guid": "com.example.dependent",
                        "mod_name": "Dependent Mod",
                        "current_version": "1.0.0",
                        "constraint": "^2.0.0",
                        "incompatible_with": "3.0.0"
                    }
                ]
            }
        ],
        "up_to_date": [
            {
                "id": 125,
                "mod_id": 25,
                "guid": "com.example.current",
                "name": "Current Mod",
                "version": "1.8.0",
                "spt_versions": [
                    "3.11.5"
                ]
            }
        ],
        "incompatible_with_spt": [
            {
                "id": 150,
                "mod_id": 30,
                "guid": "com.example.old",
                "name": "Old Mod",
                "version": "1.0.0",
                "reason": "no_version_for_spt",
                "latest_compatible_version": null
            }
        ]
    }
}
 

Example response (400, Missing Parameter):


{
    "success": false,
    "code": "VALIDATION_FAILED",
    "message": "You must provide both 'mods' and 'spt_version' parameters."
}
 

Example response (400, Invalid SPT Version):


{
    "success": false,
    "code": "VALIDATION_FAILED",
    "message": "SPT version not found or not published."
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/mods/updates

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

mods   string     

Comma-separated list of identifier:version pairs for installed mods. Identifier can be mod_id (numeric) or GUID (string). Example: 5:1.2.0,com.example.mod:2.0.5

spt_version   string     

Target SPT version to check compatibility against. Example: 3.11.5

Get Mod Dependencies

Resolves the dependency tree of one or more mod versions for a specific SPT version. This endpoint is designed for mod managers and installers that need to determine, in a single call, which mods must be downloaded and installed for each queried mod and whether the full set of queried mods is internally consistent.

How it works:

Response Structure: data is an object with one key per queried identifier:version pair (exactly as provided, whitespace trimmed). Pairs that do not resolve to a published mod version are omitted. A queried mod without dependencies maps to an empty array. Each entry is an array of dependency nodes:

Version choices are made among the versions each constraint resolves to. When constraints are compatible, all trees agree on one version per dependency mod, at every nesting level.

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/mods/dependencies?mods=5%3A1.2.0%2Ccom.example.mod%3A2.0.5%2C15%3A3.1.0&spt_version=3.11.5" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/mods/dependencies"
);

const params = {
    "mods": "5:1.2.0,com.example.mod:2.0.5,15:3.1.0",
    "spt_version": "3.11.5",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/mods/dependencies';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'mods' => '5:1.2.0,com.example.mod:2.0.5,15:3.1.0',
            'spt_version' => '3.11.5',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/mods/dependencies'
params = {
  'mods': '5:1.2.0,com.example.mod:2.0.5,15:3.1.0',
  'spt_version': '3.11.5',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success):


{
    "success": true,
    "data": {
        "com.example.mod:2.0.5": [
            {
                "id": 5,
                "guid": "com.example.dependency",
                "name": "Dependency Mod",
                "slug": "dependency-mod",
                "latest_compatible_version": {
                    "id": 42,
                    "version": "2.1.0",
                    "link": "https://forge.sp-tarkov.com/mod/download/5/dependency-mod/2.1.0",
                    "content_length": 1048576,
                    "fika_compatibility": "compatible"
                },
                "conflict": false,
                "dependencies": []
            }
        ],
        "15:3.1.0": []
    }
}
 

Example response (200, Success (Unsatisfiable On This SPT Version)):


{
    "success": true,
    "data": {
        "com.example.mod:2.0.5": [
            {
                "id": 5,
                "guid": "com.example.dependency",
                "name": "Dependency Mod",
                "slug": "dependency-mod",
                "latest_compatible_version": null,
                "conflict": false,
                "dependencies": []
            }
        ]
    }
}
 

Example response (200, Success (No Queried Mods Found)):


{
    "success": true,
    "data": {}
}
 

Example response (400, Missing Parameters):


{
    "success": false,
    "code": "VALIDATION_FAILED",
    "message": "You must provide both 'mods' and 'spt_version' parameters."
}
 

Example response (400, Unknown SPT Version):


{
    "success": false,
    "code": "VALIDATION_FAILED",
    "message": "SPT version not found or not published."
}
 

Example response (400, Invalid Format):


{
    "success": false,
    "code": "VALIDATION_FAILED",
    "message": "Invalid format for 'mods' parameter. Expected format: 'identifier:version,identifier:version' where identifier is either a mod_id (numeric) or GUID (string)"
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/mods/dependencies

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

mods   string     

Comma-separated list of identifier:version pairs to resolve dependencies for. Identifier can be either a mod_id (numeric) or GUID (string). Version strings must match exactly. Example: 5:1.2.0,com.example.mod:2.0.5,15:3.1.0

spt_version   string     

SPT version to resolve dependency versions against. Must match a published SPT version exactly. Example: 3.11.5

Get Mod Version File Tree

Retrieves the archive file listing recorded by the latest passed verification of a mod version. The files array contains the relative path of every file inside the version's download archive.

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/mod/0/versions/0/file-tree" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/mod/0/versions/0/file-tree"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/mod/0/versions/0/file-tree';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/mod/0/versions/0/file-tree'
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Success):


{
    "success": true,
    "data": {
        "verified_at": "2026-07-01T12:00:00.000000Z",
        "file_count": 3,
        "truncated": false,
        "files": [
            "BepInEx/plugins/ExampleMod.dll",
            "user/mods/example-mod/package.json",
            "user/mods/example-mod/src/mod.js"
        ]
    }
}
 

Example response (404, File Tree Not Available):


{
    "success": false,
    "code": "NOT_FOUND",
    "message": "Resource not found."
}
 

Request      

GET api/v0/mod/{modId}/versions/{versionId}/file-tree

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

modId   string     

Example: 0

versionId   string     

Example: 0

Addons

Endpoints for managing and retrieving addons.

Get Addons

Retrieves a paginated list of addons, allowing filtering, sorting, and relationship inclusion.

Fields available:
name, slug, teaser, thumbnail, downloads, detail_url, contains_ai_content, contains_ads, mod_id, published_at, created_at, updated_at

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/addons?fields=name%2Cslug%2Ccreated_at&filter%5Bid%5D=1%2C5%2C10&filter%5Bname%5D=Music+Pack&filter%5Bslug%5D=some-addon&filter%5Bteaser%5D=important&filter%5Bmod_id%5D=1%2C2%2C3&filter%5Bcontains_ads%5D=false&filter%5Bcontains_ai_content%5D=false&filter%5Bis_detached%5D=false&filter%5Bcreated_between%5D=2025-01-01%2C2025-03-31&filter%5Bupdated_between%5D=2025-01-01%2C2025-03-31&filter%5Bpublished_between%5D=2025-01-01%2C2025-03-31&query=music+pack&include=versions%2Cmod&sort=-name&page=2&per_page=25" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/addons"
);

const params = {
    "fields": "name,slug,created_at",
    "filter[id]": "1,5,10",
    "filter[name]": "Music Pack",
    "filter[slug]": "some-addon",
    "filter[teaser]": "important",
    "filter[mod_id]": "1,2,3",
    "filter[contains_ads]": "false",
    "filter[contains_ai_content]": "false",
    "filter[is_detached]": "false",
    "filter[created_between]": "2025-01-01,2025-03-31",
    "filter[updated_between]": "2025-01-01,2025-03-31",
    "filter[published_between]": "2025-01-01,2025-03-31",
    "query": "music pack",
    "include": "versions,mod",
    "sort": "-name",
    "page": "2",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/addons';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'name,slug,created_at',
            'filter[id]' => '1,5,10',
            'filter[name]' => 'Music Pack',
            'filter[slug]' => 'some-addon',
            'filter[teaser]' => 'important',
            'filter[mod_id]' => '1,2,3',
            'filter[contains_ads]' => 'false',
            'filter[contains_ai_content]' => 'false',
            'filter[is_detached]' => 'false',
            'filter[created_between]' => '2025-01-01,2025-03-31',
            'filter[updated_between]' => '2025-01-01,2025-03-31',
            'filter[published_between]' => '2025-01-01,2025-03-31',
            'query' => 'music pack',
            'include' => 'versions,mod',
            'sort' => '-name',
            'page' => '2',
            'per_page' => '25',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/addons'
params = {
  'fields': 'name,slug,created_at',
  'filter[id]': '1,5,10',
  'filter[name]': 'Music Pack',
  'filter[slug]': 'some-addon',
  'filter[teaser]': 'important',
  'filter[mod_id]': '1,2,3',
  'filter[contains_ads]': 'false',
  'filter[contains_ai_content]': 'false',
  'filter[is_detached]': 'false',
  'filter[created_between]': '2025-01-01,2025-03-31',
  'filter[updated_between]': '2025-01-01,2025-03-31',
  'filter[published_between]': '2025-01-01,2025-03-31',
  'query': 'music pack',
  'include': 'versions,mod',
  'sort': '-name',
  'page': '2',
  'per_page': '25',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success (All fields, No Includes)):


{
    "success": true,
    "data": [
        {
            "id": 1,
            "name": "Ultimate Music Pack",
            "slug": "ultimate-music-pack",
            "teaser": "A collection of atmospheric music tracks",
            "thumbnail": "",
            "downloads": 1523,
            "owner": {
                "id": 1,
                "name": "AddonAuthor",
                "profile_photo_url": "https://example.com/profile.jpg",
                "cover_photo_url": "https://example.com/cover.jpg"
            },
            "additional_authors": [],
            "source_code_links": [],
            "detail_url": "https://forge.sp-tarkov.com/addon/1/ultimate-music-pack",
            "contains_ads": false,
            "contains_ai_content": false,
            "mod_id": 5,
            "is_detached": false,
            "published_at": "2025-01-09T17:48:53.000000Z",
            "created_at": "2024-12-11T14:48:53.000000Z",
            "updated_at": "2025-04-10T13:50:00.000000Z"
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/addons?page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/addons?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/addons?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/addons",
        "per_page": 12,
        "to": 1,
        "total": 1
    }
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/addons

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: name,slug,created_at

filter[id]   string  optional    

Filter by comma-separated Addon IDs. Example: 1,5,10

filter[name]   string  optional    

Filter by name (fuzzy filter). Example: Music Pack

filter[slug]   string  optional    

Filter by slug (fuzzy filter). Example: some-addon

filter[teaser]   string  optional    

Filter by teaser text (fuzzy filter). Example: important

filter[mod_id]   string  optional    

Filter by comma-separated mod IDs (parent mod). Example: 1,2,3

filter[contains_ads]   string  optional    

Filter by contains_ads status (1, true, 0, false). Example: false

filter[contains_ai_content]   string  optional    

Filter by contains_ai_content status (1, true, 0, false). Example: false

filter[is_detached]   string  optional    

Filter by detached status (1, true, 0, false). Example: false

filter[created_between]   string  optional    

Filter by creation date range (YYYY-MM-DD,YYYY-MM-DD). Example: 2025-01-01,2025-03-31

filter[updated_between]   string  optional    

Filter by update date range (YYYY-MM-DD,YYYY-MM-DD). Example: 2025-01-01,2025-03-31

filter[published_between]   string  optional    

Filter by publication date range (YYYY-MM-DD,YYYY-MM-DD). Example: 2025-01-01,2025-03-31

query   string  optional    

Search query to filter addons using Meilisearch. This will search across name, slug, and description fields. Example: music pack

include   string  optional    

Comma-separated list of relationships. Available: versions, license, mod, source_code_links. Example: versions,mod

sort   string  optional    

Sort results by attribute(s). Default ASC. Prefix with - for DESC. Comma-separate multiple fields. Allowed: name, created_at, updated_at, published_at. Example: -name

page   integer  optional    

The page number for pagination. Example: 2

per_page   integer  optional    

The number of results per page (max 50). Example: 25

Get Addon Details

Retrieves details for a single addon, allowing relationship inclusion.

Fields available:
name, slug, teaser, description, thumbnail, downloads, source_code_links, detail_url, contains_ai_content, custom_ai_disclosure, contains_ads, mod_id, is_detached, published_at, created_at, updated_at

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/addon/0?fields=name%2Cslug%2Ccreated_at&include=versions%2Clicense" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/addon/0"
);

const params = {
    "fields": "name,slug,created_at",
    "include": "versions,license",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/addon/0';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'name,slug,created_at',
            'include' => 'versions,license',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/addon/0'
params = {
  'fields': 'name,slug,created_at',
  'include': 'versions,license',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success (All fields, No Includes)):


{
    "success": true,
    "data": {
        "id": 1,
        "name": "Ultimate Music Pack",
        "slug": "ultimate-music-pack",
        "teaser": "A collection of atmospheric music tracks",
        "description": "This addon adds over 50 new music tracks...",
        "thumbnail": "",
        "downloads": 1523,
        "owner": {
            "id": 1,
            "name": "AddonAuthor",
            "profile_photo_url": "https://example.com/profile.jpg",
            "cover_photo_url": "https://example.com/cover.jpg"
        },
        "additional_authors": [],
        "source_code_links": [],
        "detail_url": "https://forge.sp-tarkov.com/addon/1/ultimate-music-pack",
        "contains_ads": false,
        "contains_ai_content": false,
        "custom_ai_disclosure": "<p>AI tools were used to generate placeholder music tracks.</p>",
        "mod_id": 5,
        "is_detached": false,
        "published_at": "2025-01-09T17:48:53.000000Z",
        "created_at": "2024-12-11T14:48:53.000000Z",
        "updated_at": "2025-04-10T13:50:00.000000Z"
    }
}
 

Example response (404, Addon Does Not Exist):


{
    "success": false,
    "code": "NOT_FOUND",
    "message": "Resource not found."
}
 

Request      

GET api/v0/addon/{addonId}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

addonId   string     

Example: 0

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: name,slug,created_at

include   string  optional    

Comma-separated list of relationships. Available: versions, license, mod, source_code_links. Example: versions,license

Get Addon Versions

Retrieves a paginated list of addon versions, allowing filtering, sorting, and relationship inclusion.

Fields available:
id, version, description, link, content_length, mod_version_constraint, downloads, published_at, created_at, updated_at

The content_length field contains the file size in bytes as determined by the Content-Length header from the download link. This field may be null for versions created before file size validation was implemented.

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/addon/0/versions?fields=id%2Cversion%2Clink%2Ccreated_at&filter%5Bid%5D=234%2C432&filter%5Bversion%5D=%5E1.0.0&filter%5Bdescription%5D=This+is+a+description&filter%5Bpublished_between%5D=2025-01-01%2C2025-03-31&filter%5Bcreated_between%5D=2025-01-01%2C2025-03-31&filter%5Bupdated_between%5D=2025-01-01%2C2025-03-31&include=virus_total_links&sort=-version%2C-created_at&page=2&per_page=25" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/addon/0/versions"
);

const params = {
    "fields": "id,version,link,created_at",
    "filter[id]": "234,432",
    "filter[version]": "^1.0.0",
    "filter[description]": "This is a description",
    "filter[published_between]": "2025-01-01,2025-03-31",
    "filter[created_between]": "2025-01-01,2025-03-31",
    "filter[updated_between]": "2025-01-01,2025-03-31",
    "include": "virus_total_links",
    "sort": "-version,-created_at",
    "page": "2",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/addon/0/versions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'id,version,link,created_at',
            'filter[id]' => '234,432',
            'filter[version]' => '^1.0.0',
            'filter[description]' => 'This is a description',
            'filter[published_between]' => '2025-01-01,2025-03-31',
            'filter[created_between]' => '2025-01-01,2025-03-31',
            'filter[updated_between]' => '2025-01-01,2025-03-31',
            'include' => 'virus_total_links',
            'sort' => '-version,-created_at',
            'page' => '2',
            'per_page' => '25',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/addon/0/versions'
params = {
  'fields': 'id,version,link,created_at',
  'filter[id]': '234,432',
  'filter[version]': '^1.0.0',
  'filter[description]': 'This is a description',
  'filter[published_between]': '2025-01-01,2025-03-31',
  'filter[created_between]': '2025-01-01,2025-03-31',
  'filter[updated_between]': '2025-01-01,2025-03-31',
  'include': 'virus_total_links',
  'sort': '-version,-created_at',
  'page': '2',
  'per_page': '25',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success (All fields, No Includes)):


{
    "success": true,
    "data": [
        {
            "id": 1,
            "version": "1.2.0",
            "description": "Added 10 new tracks",
            "link": "https://forge.sp-tarkov.com/addon/download/1/example-addon/1.2.0",
            "content_length": 52428800,
            "mod_version_constraint": "^2.0.0",
            "downloads": 523,
            "published_at": "2025-01-09T17:48:53.000000Z",
            "created_at": "2024-12-11T14:48:53.000000Z",
            "updated_at": "2025-04-10T13:50:00.000000Z"
        },
        {
            "id": 2,
            "version": "1.1.0",
            "description": "Fixed audio glitches",
            "link": "https://forge.sp-tarkov.com/addon/download/1/example-addon/1.1.0",
            "content_length": 51200000,
            "mod_version_constraint": "^2.0.0",
            "downloads": 1000,
            "published_at": "2024-12-15T10:30:00.000000Z",
            "created_at": "2024-11-20T08:15:00.000000Z",
            "updated_at": "2025-01-05T12:45:00.000000Z"
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/addon/1/versions?page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/addon/1/versions?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/addon/1/versions?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/addon/1/versions",
        "per_page": 12,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/addon/{addonId}/versions

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

addonId   string     

Example: 0

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: id,version,link,created_at

filter[id]   string  optional    

Filter by addon version ID. Comma-separated. Example: 234,432

filter[version]   string  optional    

Filter addon versions by using a SemVer constraint. Example: ^1.0.0

filter[description]   string  optional    

Fuzzy-filter by addon version description. Example: This is a description

filter[published_between]   string  optional    

Filter by addon version published between. Example: 2025-01-01,2025-03-31

filter[created_between]   string  optional    

Filter by addon version created between. Example: 2025-01-01,2025-03-31

filter[updated_between]   string  optional    

Filter by addon version updated between. Example: 2025-01-01,2025-03-31

include   string  optional    

Comma-separated list of relationships. Available: virus_total_links. Example: virus_total_links

sort   string  optional    

Sort results by attribute(s). Default ASC. Prefix with - for DESC. Comma-separate multiple fields. Example: -version,-created_at

page   integer  optional    

The page number for pagination. Example: 2

per_page   integer  optional    

The number of results per page (max 50). Example: 25

Get Addon Version File Tree

Retrieves the archive file listing recorded by the latest passed verification of an addon version. The files array contains the relative path of every file inside the version's download archive.

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/addon/0/versions/0/file-tree" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/addon/0/versions/0/file-tree"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/addon/0/versions/0/file-tree';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/addon/0/versions/0/file-tree'
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Success):


{
    "success": true,
    "data": {
        "verified_at": "2026-07-01T12:00:00.000000Z",
        "file_count": 2,
        "truncated": false,
        "files": [
            "user/mods/example-mod/addons/example-addon/config.json",
            "user/mods/example-mod/addons/example-addon/tracks/track01.ogg"
        ]
    }
}
 

Example response (404, File Tree Not Available):


{
    "success": false,
    "code": "NOT_FOUND",
    "message": "Resource not found."
}
 

Request      

GET api/v0/addon/{addonId}/versions/{versionId}/file-tree

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

addonId   string     

Example: 0

versionId   string     

Example: 0

Get Addon Dependencies

Resolves the mod dependency tree of one or more addon versions for a specific SPT version. This endpoint is designed for mod managers and installers that need to determine, in a single call, which mods must be downloaded and installed for each queried addon and whether the full set of queried addons is internally consistent.

How it works:

Response Structure: data is an object with one key per queried identifier:version pair (exactly as provided, whitespace trimmed). Pairs that do not resolve to a published addon version are omitted. A queried addon without dependencies maps to an empty array. Each entry is an array of mod dependency nodes:

Version choices are made among the versions each constraint resolves to. When constraints are compatible, all trees agree on one version per dependency mod, at every nesting level.

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/addons/dependencies?addons=5%3A1.2.0%2Cmy-addon%3A2.0.5%2C15%3A3.1.0&spt_version=3.11.5" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/addons/dependencies"
);

const params = {
    "addons": "5:1.2.0,my-addon:2.0.5,15:3.1.0",
    "spt_version": "3.11.5",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/addons/dependencies';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'addons' => '5:1.2.0,my-addon:2.0.5,15:3.1.0',
            'spt_version' => '3.11.5',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/addons/dependencies'
params = {
  'addons': '5:1.2.0,my-addon:2.0.5,15:3.1.0',
  'spt_version': '3.11.5',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success):


{
    "success": true,
    "data": {
        "my-addon:2.0.5": [
            {
                "id": 5,
                "guid": "com.example.dependency",
                "name": "Dependency Mod",
                "slug": "dependency-mod",
                "latest_compatible_version": {
                    "id": 42,
                    "version": "2.1.0",
                    "link": "https://forge.sp-tarkov.com/mod/download/5/dependency-mod/2.1.0",
                    "content_length": 1048576,
                    "fika_compatibility": "compatible"
                },
                "conflict": false,
                "dependencies": []
            }
        ],
        "15:3.1.0": []
    }
}
 

Example response (200, Success (No Queried Addons Found)):


{
    "success": true,
    "data": {}
}
 

Example response (400, Missing Parameters):


{
    "success": false,
    "code": "VALIDATION_FAILED",
    "message": "You must provide both 'addons' and 'spt_version' parameters."
}
 

Example response (400, Unknown SPT Version):


{
    "success": false,
    "code": "VALIDATION_FAILED",
    "message": "SPT version not found or not published."
}
 

Example response (400, Invalid Format):


{
    "success": false,
    "code": "VALIDATION_FAILED",
    "message": "Invalid format for 'addons' parameter. Expected format: 'identifier:version,identifier:version' where identifier is either an addon_id (numeric) or slug (string)"
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/addons/dependencies

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

addons   string     

Comma-separated list of identifier:version pairs to resolve dependencies for. Identifier can be either an addon_id (numeric) or slug (string). Version strings must match exactly. Example: 5:1.2.0,my-addon:2.0.5,15:3.1.0

spt_version   string     

SPT version to resolve dependency versions against. Must match a published SPT version exactly. Example: 3.11.5

Mod Categories

Endpoints for retrieving mod category data.

Get Mod Categories

Retrieves a paginated list of mod categories, allowing filtering and sorting.

Fields available:
id, hub_id, title, slug, description

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/mod-categories?fields=id%2Ctitle%2Cslug&filter%5Bid%5D=1%2C2%2C3&filter%5Bslug%5D=weapons%2Cgear&filter%5Btitle%5D=weapon&sort=title%2C-slug&page=2&per_page=50" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/mod-categories"
);

const params = {
    "fields": "id,title,slug",
    "filter[id]": "1,2,3",
    "filter[slug]": "weapons,gear",
    "filter[title]": "weapon",
    "sort": "title,-slug",
    "page": "2",
    "per_page": "50",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/mod-categories';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'id,title,slug',
            'filter[id]' => '1,2,3',
            'filter[slug]' => 'weapons,gear',
            'filter[title]' => 'weapon',
            'sort' => 'title,-slug',
            'page' => '2',
            'per_page' => '50',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/mod-categories'
params = {
  'fields': 'id,title,slug',
  'filter[id]': '1,2,3',
  'filter[slug]': 'weapons,gear',
  'filter[title]': 'weapon',
  'sort': 'title,-slug',
  'page': '2',
  'per_page': '50',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success):


{
    "success": true,
    "data": [
        {
            "id": 1,
            "hub_id": 12,
            "title": "Weapons",
            "slug": "weapons",
            "description": "Weapon mods and attachments",
        },
        {
            "id": 2,
            "hub_id": 13,
            "title": "Gear",
            "slug": "gear",
            "description": "Armor, rigs, and equipment",
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/mod-categories?page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/mod-categories?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/mod-categories?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/mod-categories",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/mod-categories

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: id,title,slug

filter[id]   string  optional    

Filter by category ID. Comma-separated. Example: 1,2,3

filter[slug]   string  optional    

Filter by category slug. Comma-separated. Example: weapons,gear

filter[title]   string  optional    

Filter by category title (wildcard search). Example: weapon

sort   string  optional    

Sort results by attribute(s). Default ASC. Prefix with - for DESC. Comma-separate multiple fields. Example: title,-slug

page   integer  optional    

The page number for pagination. Example: 2

per_page   integer  optional    

The number of results per page (max 100). Example: 50

Get Mod Category

Retrieves a single mod category by ID or slug.

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/mod-categories/illum?fields=id%2Ctitle%2Cslug" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/mod-categories/illum"
);

const params = {
    "fields": "id,title,slug",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/mod-categories/illum';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'id,title,slug',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/mod-categories/illum'
params = {
  'fields': 'id,title,slug',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success):


{
    "success": true,
    "data": {
        "id": 1,
        "hub_id": 12,
        "title": "Weapons",
        "slug": "weapons",
        "description": "Weapon mods and attachments",
    }
}
 

Example response (404, Not Found):


{
    "success": false,
    "code": "NOT_FOUND",
    "message": "The requested resource was not found."
}
 

Request      

GET api/v0/mod-categories/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the mod category. Example: illum

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: id,title,slug

SPT Versions

Endpoints for retrieving SPT-related data.

Get SPT Versions

Retrieves a paginated list of SPT versions, allowing filtering and sorting.

Fields available:
id, version, version_major, version_minor, version_patch, version_labels, mod_count, link, color_class, created_at, updated_at

Example request:
curl --request GET \
    --get "https://forge.sp-tarkov.com/api/v0/spt/versions?fields=id%2Cversion%2Ccreated_at&filter%5Bid%5D=234%2C432&filter%5Bcreated_between%5D=2025-01-01%2C2025-03-31&filter%5Bupdated_between%5D=2025-01-01%2C2025-03-31&filter%5Bspt_version%5D=%5E3.9.0&sort=-version%2Ccreated_at&page=2&per_page=25" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://forge.sp-tarkov.com/api/v0/spt/versions"
);

const params = {
    "fields": "id,version,created_at",
    "filter[id]": "234,432",
    "filter[created_between]": "2025-01-01,2025-03-31",
    "filter[updated_between]": "2025-01-01,2025-03-31",
    "filter[spt_version]": "^3.9.0",
    "sort": "-version,created_at",
    "page": "2",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://forge.sp-tarkov.com/api/v0/spt/versions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fields' => 'id,version,created_at',
            'filter[id]' => '234,432',
            'filter[created_between]' => '2025-01-01,2025-03-31',
            'filter[updated_between]' => '2025-01-01,2025-03-31',
            'filter[spt_version]' => '^3.9.0',
            'sort' => '-version,created_at',
            'page' => '2',
            'per_page' => '25',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://forge.sp-tarkov.com/api/v0/spt/versions'
params = {
  'fields': 'id,version,created_at',
  'filter[id]': '234,432',
  'filter[created_between]': '2025-01-01,2025-03-31',
  'filter[updated_between]': '2025-01-01,2025-03-31',
  'filter[spt_version]': '^3.9.0',
  'sort': '-version,created_at',
  'page': '2',
  'per_page': '25',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200, Success):


{
    "success": true,
    "data": [
        {
            "id": 2,
            "version": "3.11.3",
            "version_major": 3,
            "version_minor": 11,
            "version_patch": 3,
            "version_labels": "",
            "mod_count": 371,
            "link": "https://github.com/sp-tarkov/build/releases/tag/3.11.3",
            "color_class": "green",
            "created_at": "2025-04-08T19:29:40.000000Z",
            "updated_at": "2025-04-08T19:29:40.000000Z"
        },
        {
            "id": 3,
            "version": "3.11.2",
            "version_major": 3,
            "version_minor": 11,
            "version_patch": 2,
            "version_labels": "",
            "mod_count": 371,
            "link": "https://github.com/sp-tarkov/build/releases/tag/3.11.2",
            "color_class": "green",
            "created_at": "2025-03-31T12:39:00.000000Z",
            "updated_at": "2025-03-31T12:39:00.000000Z"
        }
    ],
    "links": {
        "first": "https://forge.sp-tarkov.com/api/v0/spt/versions?page=1",
        "last": "https://forge.sp-tarkov.com/api/v0/spt/versions?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "https://forge.sp-tarkov.com/api/v0/spt/versions?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "https://forge.sp-tarkov.com/api/v0/spt/versions",
        "per_page": 12,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Unauthenticated):


{
    "success": false,
    "code": "UNAUTHENTICATED",
    "message": "Unauthenticated."
}
 

Request      

GET api/v0/spt/versions

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

fields   string  optional    

Comma-separated list of fields to include in the response. Defaults to all fields. Example: id,version,created_at

filter[id]   string  optional    

Filter by SPT version ID. Comma-separated. Example: 234,432

filter[created_between]   string  optional    

Filter between by two created_at dates. Example: 2025-01-01,2025-03-31

filter[updated_between]   string  optional    

Filter between by two updated_at dates. Example: 2025-01-01,2025-03-31

filter[spt_version]   string  optional    

Filter versions that are compatible with a SemVer constraint. Example: ^3.9.0

sort   string  optional    

Sort results by attribute(s). Default ASC. Prefix with - for DESC. Comma-separate multiple fields. Example: -version,created_at

page   integer  optional    

The page number for pagination. Example: 2

per_page   integer  optional    

The number of results per page (max 50). Example: 25