GitLab quickstart
Everything you need for your first call is on this screen.
Base URL
Point your GitLab client at https://gl.sandboxapis.dev. Paths mirror gitlab.com/api/v4.
curl https://gl.sandboxapis.dev/api/v4/projects/olympus-labs%2FparthenonDrop in your client
The only change is the base URL — python-gitlab works unmodified.
import gitlab
gl = gitlab.Gitlab("https://gl.sandboxapis.dev")
project = gl.projects.get("olympus-labs/parthenon")
print(project.path_with_namespace) # "olympus-labs/parthenon"
mrs = project.mergerequests.list(state="all")A real response
{
"id": 4411,
"description": "Monorepo for the Olympus Labs developer platform — the temple everything is built on.",
"name": "parthenon",
"name_with_namespace": "Olympus Labs / parthenon",
"path": "parthenon",
"path_with_namespace": "olympus-labs/parthenon",
"created_at": "2026-06-25T17:20:00.000Z",
"default_branch": "main",
"tag_list": [
"developer-tools",
"platform",
"typescript",
"monorepo"
],
"topics": [
"developer-tools",
"platform",
"typescript",
"monorepo"
],
"ssh_url_to_repo": "git@gl.internal:olympus-labs/parthenon.git",
"http_url_to_repo": "http://gl.internal/olympus-labs/parthenon.git",
"web_url": "http://gl.internal/olympus-labs/parthenon",
"readme_url": "http://gl.internal/olympus-labs/parthenon/-/blob/main/README.md",
"forks_count": 0,
"star_count": 0,
"last_activity_at": "2026-06-25T17:20:00.000Z",
"namespace": {
"id": 72807,
"name": "Olympus Labs",
"path": "olympus-labs",
"kind": "group",
"full_path": "olympus-labs",
"web_url": "http://gl.internal/groups/olympus-labs"
},
"visibility": "private",
"archived": false,
"empty_repo": false,
"issues_enabled": true,
"merge_requests_enabled": true,
"wiki_enabled": false,
"jobs_enabled": true,
"snippets_enabled": false,
"can_create_merge_request_in": true
}Pin a snapshot for CI
Same env-var swap, a *.snap. host — byte-identical on every request.
# reproducible in CI
export CI_API_V4_URL=https://gl-v4.snap.sandboxapis.dev/api/v4