BYTETOOLS

GDBrowser (Geometry Dash) API

Free Geometry Dash API with no key. GDBrowser proxies RobTop's servers and returns levels, profiles, leaderboards and song data as clean JSON. Tested live example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the GDBrowser (Geometry Dash) API?

GDBrowser exposes Geometry Dash's servers as a JSON API with no key required. It returns level details including difficulty, downloads, likes, object count and song credits, plus player profiles, leaderboards, comments and level search, all as ordinary REST endpoints.

Geometry Dash's own servers speak a bespoke, colon-delimited protocol that was never meant for third parties. GDBrowser sits in front of that and hands back JSON, which is the entire value proposition — every community tool, statistics site and Discord bot in the ecosystem is built on this translation layer rather than on RobTop's raw endpoints. It also means availability is inherited: when the game's servers wobble, GDBrowser wobbles with them, and a 500 here often means an outage upstream rather than a fault in the proxy.

Type inconsistency is baked in and worth planning around. `id`, `playerID`, `accountID`, `copiedID` and `customSong` all come back as strings while `downloads`, `likes` and `objects` are numbers — an artefact of the underlying protocol, where everything is text and only some fields get coerced. `songID` is stranger still: for a level using an official soundtrack it reads `"Level 5"`, a human label rather than an identifier, with the real song name and author in `songName` and `songAuthor` beside it.

Quick facts

Base URL
https://gdbrowser.com/api
Authentication
No key or account. The response carries `x-ratelimit-limit`, `x-ratelimit-remaining` and `x-ratelimit-reset` headers.
Rate limit
Headers reported a limit of 150 per window with a reset timestamp. Since every call proxies to RobTop's servers, staying well inside that is good manners as well as good practice.
Pricing
Free, community-run.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the GDBrowser (Geometry Dash) API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Look up a Geometry Dash level by id

GET https://gdbrowser.com/api/level/128

curl
curl 'https://gdbrowser.com/api/level/128'
JavaScript (fetch)
const res = await fetch("https://gdbrowser.com/api/level/128");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://gdbrowser.com/api/level/128", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "name": "1st level",
  "id": "128",
  "description": "(No description provided)",
  "author": "real storm",
  "playerID": "30144023",
  "accountID": "6338004",
  "difficulty": "Hard",
  "downloads": 4148175,
  "likes": 304196,
  "disliked": false,
  "length": "Medium",
  "platformer": false,
  "stars": 0,
  "orbs": 0,
  "diamonds": 0,
  "featured": false,
  "epic": false,
  "epicValue": 0,
  "legendary": false,
  "mythic": false,
  "gameVersion": "2.1",
  "editorTime": 0,
  "totalEditorTime": 0,
  "version": 1,
  "copiedID": "128",
  "twoPlayer": false,
  "officialSong": 5,
  "customSong": "0",
  "coins": 0,
  "verifiedCoins": false,
  "starsRequested": 2,
  "ldm": false,
  "objects": 208,
  "large": false,
  "cp": 0,
  "partialDiff": "hard",
  "difficultyFace": "hard",
  "songName": "Base After Base",
  "songAuthor": "DJVI",
  "songSize": "0MB",
  "songID": "Level 5"
}

Parameters

ParameterTypeRequiredDescription
level idpath segmentRequiredNumeric level id appended to `/api/level/`. 128
usernamepath segmentOptionalPlayer name for the `/api/profile/{name}` endpoint. RobTop
queryqueryOptionalSearch term for `/api/search/{query}`, with filters for difficulty, length and song. bloodbath
countqueryOptionalResult count on search and leaderboard endpoints. 10

Response fields

id / playerID / accountID / copiedIDstring
All returned as strings despite being numeric, an artefact of the underlying game protocol. Compare as strings or coerce consistently.
name / author / descriptionstring
Level title, creator name and description. An empty description arrives as the literal text `(No description provided)`, not an empty string.
difficultystring
Human-readable difficulty such as `Hard`, with `partialDiff` and `difficultyFace` giving the lowercase and icon-name variants.
downloads / likes / objectsinteger
Genuinely numeric, unlike the id fields. `objects` is the level's object count, a rough proxy for complexity.
stars / orbs / diamonds / coinsinteger
Reward values. Zero on unrated levels, which is most of them.
featured / epic / legendary / mythicboolean
Rating tiers, with `epicValue` carrying the numeric grade behind them.
customSongstring
Newgrounds song id as a string, or `"0"` when the level uses an official track.
songIDstring
For official tracks this is a label such as `Level 5`, not an id. Read `songName` and `songAuthor` for display.
gameVersionstring
The editor version the level was built in, useful for spotting very old levels.

What you can build with the GDBrowser (Geometry Dash) API

  • Build a Geometry Dash level browser or search page
  • Show a player's stats and completed demons on a profile card
  • Add a level lookup command to a community Discord bot
  • Track leaderboard movement over time
  • Credit the correct Newgrounds artist for a level's music

Common errors and how to fix them

A 500 or a timeout

GDBrowser proxies RobTop's servers, which go down periodically.

Fix: Retry with backoff and cache the last good response; a failure here usually reflects an upstream outage rather than a bad request.

-1 or an error string in the body

The game servers rejected the lookup — commonly an unrated or deleted level.

Fix: Treat any non-object body as a miss and check the level exists on the site before assuming your request was malformed.

Comparison failures on ids

You compared a string `id` against a numeric literal.

Fix: Coerce consistently at the boundary. Nearly every id-like field here is a string.

429

Above the 150-per-window allowance.

Fix: Watch `x-ratelimit-remaining` and cache level data — a published level's details rarely change.

GDBrowser (Geometry Dash) API — frequently asked questions

Is there a Geometry Dash API?

Not an official JSON one. RobTop's servers speak a bespoke text protocol, and GDBrowser is the community proxy that translates it into ordinary REST endpoints with no key required — which is what nearly every Geometry Dash tool is built on.

Why are level ids returned as strings?

Because the underlying game protocol is entirely text-based and GDBrowser only coerces some fields to numbers. Ids stay strings while counts such as downloads and likes become numbers, so coerce consistently in your own code.

What does songID: 'Level 5' mean?

The level uses one of the game's official soundtracks rather than a Newgrounds upload, and the field carries a label instead of an id. Use `songName` and `songAuthor` for display, and check whether `customSong` is `"0"` to detect the case.

Why does the API sometimes return 500?

Because it proxies Geometry Dash's own servers. When those are down or throttling, GDBrowser has nothing to return. Retry with backoff and serve cached data — level details are stable enough that stale results are acceptable.

Tools that pair with this API

GDBrowser (Geometry Dash) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.