Founding keys are opena year free at 6,000 req/hour, for the first 1,000 developersClaim yours
Documentation 29

Bitbucket quickstart · 3 min read

Keep bitbucket.js. Change one line.

Everything you need for your first call is on this screen. Paths mirror api.bitbucket.org/2.0, so your client code stays exactly where it is.

01Point the base URL at bb.
02Call it exactly as before
03Pin a snapshot for CI

01 / Base URL

One host, provider paths.

Point your Bitbucket client at https://bb.sandboxapis.dev. Paths mirror api.bitbucket.org/2.0 — in-body pagination envelopes, fields partial responses, braced UUIDs and all.

request.sh
curl https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon

02 / Drop in your client

bitbucket.js works unmodified.

The only change is the base URL.

typescript
import { Bitbucket } from "bitbucket";

const bitbucket = new Bitbucket({ baseUrl: "https://bb.sandboxapis.dev/2.0" });

const { data: repo } = await bitbucket.repositories.get({
  workspace: "olympus-labs",
  repo_slug: "parthenon",
});
console.log(repo.full_name); // "olympus-labs/parthenon"

const { data: prs } = await bitbucket.pullrequests.list({
  workspace: "olympus-labs",
  repo_slug: "parthenon",
  state: "MERGED",
});

The Python client is proved end to end rather than described: atlassian-python-api's exact snippet is executed against https://bb.sandboxapis.dev by a script that checks its output. Verified quickstarts →

03 / A real response

Live from the universe.

200 · application/json
{
  "type": "repository",
  "uuid": "{1209232b-6a2f-4a49-94b2-41cd95b086e3}",
  "full_name": "olympus-labs/parthenon",
  "name": "parthenon",
  "slug": "parthenon",
  "description": "Monorepo for the Olympus Labs developer platform — the temple everything is built on.",
  "scm": "git",
  "is_private": true,
  "fork_policy": "allow_forks",
  "language": "",
  "size": 313812,
  "has_issues": false,
  "has_wiki": false,
  "mainbranch": {
    "name": "main",
    "type": "branch"
  },
  "owner": {
    "type": "team",
    "uuid": "{9419004a-3c74-4560-9f80-dd6c6e20f042}",
    "username": "olympus-labs",
    "display_name": "Olympus Labs",
    "links": {
      "self": {
        "href": "https://bb.sandboxapis.dev/2.0/workspaces/olympus-labs"
      },
      "html": {
        "href": "https://bb.sandboxapis.dev/olympus-labs"
      },
      "avatar": {
        "href": "https://bb.sandboxapis.dev/2.0/avatars/olympus-labs"
      }
    }
  },
  "workspace": {
    "type": "workspace",
    "uuid": "{9419004a-3c74-4560-9f80-dd6c6e20f042}",
    "name": "Olympus Labs",
    "slug": "olympus-labs",
    "links": {
      "self": {
        "href": "https://bb.sandboxapis.dev/2.0/workspaces/olympus-labs"
      },
      "html": {
        "href": "https://bb.sandboxapis.dev/olympus-labs"
      },
      "avatar": {
        "href": "https://bb.sandboxapis.dev/2.0/avatars/olympus-labs"
      }
    }
  },
  "project": {
    "type": "project",
    "key": "OLY",
    "uuid": "{b2a8b192-da74-46f8-9505-0e241b6c7baa}",
    "name": "Olympus Labs",
    "links": {
      "html": {
        "href": "https://bb.sandboxapis.dev/olympus-labs/workspace/projects/OLY"
      },
      "avatar": {
        "href": "https://bb.sandboxapis.dev/2.0/avatars/olympus-labs"
      }
    }
  },
  "created_on": "2026-04-26T17:20:00.982407+00:00",
  "updated_on": "2026-07-25T17:19:00.495670+00:00",
  "links": {
    "self": {
      "href": "https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon"
    },
    "html": {
      "href": "https://bb.sandboxapis.dev/olympus-labs/parthenon"
    },
    "avatar": {
      "href": "https://bb.sandboxapis.dev/2.0/avatars/olympus-labs/parthenon"
    },
    "pullrequests": {
      "href": "https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/pullrequests"
    },
    "commits": {
      "href": "https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/commits"
    },
    "forks": {
      "href": "https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/forks"
    },
    "watchers": {
      "href": "https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/watchers"
    },
    "downloads": {
      "href": "https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/downloads"
    },
    "hooks": {
      "href": "https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/hooks"
    },
    "clone": [
      {
        "name": "https",
        "href": "https://bb.sandboxapis.dev/olympus-labs/parthenon.git"
      },
      {
        "name": "ssh",
        "href": "ssh://git@bb.sandboxapis.dev/olympus-labs/parthenon.git"
      }
    ]
  }
}

04 / Source browsing

The repository has real files.

Repositories carry actual source, served through Bitbucket's own src API — which, unlike the other hosts, returns raw bytes for a file and the paginated tree envelope for a directory.

src.sh
# redirects to the default branch's tree root
curl -L https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/src

# a directory listing, then the raw file, then its metadata
curl https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/src/main/src
curl https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/src/main/README.md
curl "https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/src/main/README.md?format=meta"

# the commits that actually changed a path
curl https://bb.sandboxapis.dev/2.0/repositories/olympus-labs/parthenon/filehistory/main/README.md

The same bytes are served by GitHub's contents and GitLab's repository/files — one canonical repository, three dialects.

05 / Pin a snapshot

Deterministic CI.

Same env-var swap, a *.snap. host — byte-identical on every request.

.env
# reproducible in CI
export BITBUCKET_BASE_URL=https://bb-v2.snap.sandboxapis.dev/2.0

Tour the universe → · Coverage manifest → · Versioning & pinning →