Read-only GitHub & GitLab, simulated

The staging universe for your provider integrations.

API-compatible, read-only replicas of GitHub and GitLab (REST + GraphQL), pre-loaded with a deep, realistic org — olympus-labs. Point your client's base URL at us and your read paths just work. No credentials ceremony, no rate-limit anxiety, no fake-org maintenance.

Read the quickstartGet a free API key

Try it — no signup

shell
curl https://gh.sandboxapis.dev/repos/olympus-labs/parthenon

Real, provider-shaped JSON comes back in <1s, with provider-conventional rate-limit headers showing the anonymous quota.

…and this comes back

json — GET /repos/olympus-labs/parthenon
{
  "id": 273073411,
  "node_id": "UmVwb3NpdG9yeToyNzMwNzM0MTE",
  "name": "parthenon",
  "full_name": "olympus-labs/parthenon",
  "private": true,
  "description": "Monorepo for the Olympus Labs developer platform — the temple everything is built on.",
  "default_branch": "main",
  "language": "TypeScript",
  "stargazers_count": 0,
  "open_issues_count": 6,
  "topics": [
    "developer-tools",
    "platform",
    "typescript",
    "monorepo"
  ],
  "created_at": "2026-06-25T17:20:00Z",
  "pushed_at": "2026-06-25T17:20:00Z",
  "visibility": "private"
}

Adoption is a base-URL swap

Keep your client library — change one line

javascript
import { Octokit } from "@octokit/rest";

// The only change: point baseUrl at SandboxAPIs.
const octokit = new Octokit({ baseUrl: "https://gh.sandboxapis.dev" });

const { data } = await octokit.repos.get({
  owner: "olympus-labs",
  repo: "parthenon",
});
console.log(data.full_name); // "olympus-labs/parthenon"

Deterministic snapshots

Pin a snapshot hostname in CI and the universe regenerates byte-identically on every request — your tests never drift. Same env-var swap, a *.snap. host.

Versioning & pinning →

Agent-native via MCP

An MCP server lets an agent discover the universe, query real-shaped data, and point its code at the base URLs — self-serving with zero human setup.

MCP setup →