curl --request GET \
--url https://patch.gg/api/v1/projects/searchconst options = {method: 'GET'};
fetch('https://patch.gg/api/v1/projects/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://patch.gg/api/v1/projects/search"
response = requests.get(url)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"owner": "<string>",
"owner_image": "<string>",
"slug": "<string>",
"handle": "patch/demo-mod",
"name": "<string>",
"summary": "<string>",
"description": "<string>",
"kind": "web_game",
"categories": [
"action"
],
"status": "active",
"cover_url": "<string>",
"cover_levels": [
{
"width": 123,
"url": "<string>"
}
],
"tall_cover_url": "<string>",
"tall_cover_levels": [
{
"width": 123,
"url": "<string>"
}
],
"hover_clip_url": "<string>",
"hover_clip_levels": [
{
"width": 123,
"url": "<string>"
}
],
"min_players": 123,
"max_players": 123,
"source_visibility": "open_source",
"code_license": "MIT",
"art_license": "MIT",
"links": {
"discord": "https://discord.gg/patch",
"x": "https://x.com/patchgg",
"telegram": "https://t.me/patchgg",
"youtube": "https://youtube.com/@patchgg",
"twitch": "https://twitch.tv/patchgg",
"github": "https://github.com/patchgg/demo-mod"
},
"original_creator": {
"name": "<string>",
"github_login": "<string>",
"claimed": true,
"claimable": true
},
"host_games": [
{
"slug": "<string>",
"name": "<string>",
"role": "host",
"cover_url": "<string>",
"store_urls": [
"<string>"
]
}
],
"latest_release": {
"version": "<string>",
"channel": "<string>",
"published_at": "<string>",
"trust_tier": "sandboxed",
"block": {}
},
"created_at": "<string>",
"updated_at": "<string>",
"viewer_claim": {
"can_claim": true,
"github_linked": true,
"github_login": "<string>",
"github_matches": true,
"pending": true
},
"team_release": {
"version": "<string>",
"channel": "<string>",
"published_at": "<string>",
"served": true
},
"urls": {
"page": "<string>",
"play": "<string>",
"game": "<string>"
}
}
],
"next_cursor": "<string>",
"search_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"doors": {
"current": "games",
"games": 123,
"mods": 123
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}Search games and mods
What players search: the public games and mods GET /projects lists, best match first, the same for everyone. A word counts for the best place a project has it: its name, then the game a mod is for, who made it, its genre, its summary, then its description. Words are stemmed (zombies finds zombie), the last word also matches as the start of one, and a word that matches nothing is taken for the closest one Patch has, so terarria finds Terraria. An exact name or handle comes first, and players order those that match about as well. kind, category and host_game (comma-separated) keep projects with any of those; with several host_games, projects for all of them come first, then those for fewer, each group best match first. Results stop after 500 and can shift between pages, as with any ranking. doors=true also answers how many games and how many mods match, whatever’s filtered, and with no kind, answers for the first of those with anything. PC games (pc_game) are games: they count and show with the games door’s browser games. Results leave out description. Limited by address, or by account when signed in. A query is logged to tune ranking, with no account or address, and without what looks personal (product/design/api.md); x-patch-search-log: off skips that, and x-patch-search-replaces names the search this one takes the place of while someone types. Blocks are found with GET /repos/search.
curl --request GET \
--url https://patch.gg/api/v1/projects/searchconst options = {method: 'GET'};
fetch('https://patch.gg/api/v1/projects/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://patch.gg/api/v1/projects/search"
response = requests.get(url)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"owner": "<string>",
"owner_image": "<string>",
"slug": "<string>",
"handle": "patch/demo-mod",
"name": "<string>",
"summary": "<string>",
"description": "<string>",
"kind": "web_game",
"categories": [
"action"
],
"status": "active",
"cover_url": "<string>",
"cover_levels": [
{
"width": 123,
"url": "<string>"
}
],
"tall_cover_url": "<string>",
"tall_cover_levels": [
{
"width": 123,
"url": "<string>"
}
],
"hover_clip_url": "<string>",
"hover_clip_levels": [
{
"width": 123,
"url": "<string>"
}
],
"min_players": 123,
"max_players": 123,
"source_visibility": "open_source",
"code_license": "MIT",
"art_license": "MIT",
"links": {
"discord": "https://discord.gg/patch",
"x": "https://x.com/patchgg",
"telegram": "https://t.me/patchgg",
"youtube": "https://youtube.com/@patchgg",
"twitch": "https://twitch.tv/patchgg",
"github": "https://github.com/patchgg/demo-mod"
},
"original_creator": {
"name": "<string>",
"github_login": "<string>",
"claimed": true,
"claimable": true
},
"host_games": [
{
"slug": "<string>",
"name": "<string>",
"role": "host",
"cover_url": "<string>",
"store_urls": [
"<string>"
]
}
],
"latest_release": {
"version": "<string>",
"channel": "<string>",
"published_at": "<string>",
"trust_tier": "sandboxed",
"block": {}
},
"created_at": "<string>",
"updated_at": "<string>",
"viewer_claim": {
"can_claim": true,
"github_linked": true,
"github_login": "<string>",
"github_matches": true,
"pending": true
},
"team_release": {
"version": "<string>",
"channel": "<string>",
"published_at": "<string>",
"served": true
},
"urls": {
"page": "<string>",
"play": "<string>",
"game": "<string>"
}
}
],
"next_cursor": "<string>",
"search_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"doors": {
"current": "games",
"games": 123,
"mods": 123
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "version_exists",
"message": "<string>",
"details": "<unknown>"
}
}Query Parameters
1 - 200"zombie survival"
200"web_game,mod"
400"survival,shooter"
400"minecraft-java,hollow-knight"
Also answer with doors, for Discover: games are browser games, mods mods.
true 1 <= x <= 100The next_cursor from the previous page
500