# Quick Start

Source: https://developers.bitgo.com/docs/get-started-quick-start

## Overview

Go from zero to a completed test transaction on the BitGo testnet. Follow the links to the full guides for deeper explanations.

## 1. Create a BitGo Test Account

Go to [https://app.bitgo-test.com/web/auth/signup](https://app.bitgo-test.com/web/auth/signup) and create an account. Creating an account automatically provisions a testnet enterprise that you'll use throughout this guide.

## 2. Create an Access Token

Log in to [https://app.bitgo-test.com](https://app.bitgo-test.com), go to your account settings to create a long-lived access token. Copy and save the token — you won't be able to see it again.

For the programmatic flow, or for details on scopes and spending limits, see [Create Access Tokens](/docs/get-started-access-tokens).

## 3. Install the SDK or BitGo Express

Choose the integration method that fits your stack:

* **JavaScript SDK** — For Node.js and TypeScript projects. See [Install SDK](/docs/get-started-sdk-install).
* **BitGo Express** — For any other language. Runs as a local proxy that handles client-side signing. See [Install BitGo Express](/docs/get-started-express-install).

Set your environment variables before continuing:

```shell cURL
export BITGO_ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export BITGO_API="https://app.bitgo-test.com/api/v2"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export COIN="tbtc4"
```

> 📘 **Note:** You can find your Enterprise ID in the BitGo web app under **Settings > Enterprise Settings**, or in the `enterprises` array of the token creation response.

## 4. Verify Your Setup

Confirm your access token and connection are working by fetching your user profile.

>Endpoint: [Get user](/reference/userget)

```shell cURL
export USER_ID="<YOUR_USER_ID>" # found in the access token creation response

curl -X GET "$BITGO_API/user/$USER_ID" \
  -H "Authorization: Bearer $BITGO_ACCESS_TOKEN"
```

#### Step Result

```json JSON
{
  "user": {
    "id": "62ab90e06dfda30007974f0a52a12995",
    "username": "you@example.com",
    "name": { "first": "Your", "last": "Name" },
    "email": { "email": "you@example.com", "verified": true }
  }
}
```

If you get a `401 Unauthorized` error, double-check your token and that you're using the correct environment URL.

## 5. Create Two Test Wallets

You need two wallets to send a transaction — one to send from and one to receive. For this example you'll create two Bitcoin multisig hot wallets. Run the following command twice, using a different label each time.

>Endpoint: [Generate wallet](/reference/expresswalletgenerate)
>
> 📘 **Note:** This call requires BitGo Express running locally (`docker run --platform linux/amd64 -it -p 3080:3080 bitgo/express:latest`), because Express handles client-side key generation and signing.

```shell cURL
curl -X POST "http://localhost:3080/api/v2/tbtc4/wallet/generate" \
  -H "Authorization: Bearer $BITGO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "label": "Sending Wallet",
    "passphrase": "<A_STRONG_PASSPHRASE>",
    "enterprise": "'"$ENTERPRISE_ID"'",
    "multisigType": "onchain",
    "type": "hot"
  }'
```

Run it again with `"label": "Receiving Wallet"` to create the second wallet.

#### Step Result

Save these values from each response:

* `id` — Your wallet ID
* `receiveAddress.address` — Your wallet first receive address

## 6. Fund a Wallet

Send testnet Bitcoin to the **Sending Wallet** receive address using a the [Testnet4 faucet](https://faucet.testnet4.dev).

Paste your receive address into the faucet and request coins. Wait a few minutes for the transaction to confirm, then check your balance:

>Endpoint: [Get wallet](/reference/v2walletgetbyid)

```shell cURL
export SENDING_WALLET_ID="<WALLET_ID_FROM_STEP_5>"

curl -X GET "$BITGO_API/tbtc4/wallet/$SENDING_WALLET_ID" \
  -H "Authorization: Bearer $BITGO_ACCESS_TOKEN"
```

#### Step Result

```json JSON
{
  "id": "6849948ac0623f81f74f63dbd8351d4f",
  "label": "Sending Wallet",
  "coin": "tbtc4",
  "balance": 100000,
  "balanceString": "100000",
  "confirmedBalance": 100000,
  "confirmedBalanceString": "100000",
  "spendableBalance": 100000,
  "spendableBalanceString": "100000"
}
```

The `balanceString` field uses the asset smallest unit (satoshis for `tbtc4`). A value of `100000` = 0.001 BTC.

## 7. Send a Test Transaction

Send coins from your Sending Wallet to your Receiving Wallet address.

>Endpoint: [Send coins](/reference/expresswalletsendcoins)

```shell cURL
export RECEIVING_ADDRESS="<RECEIVE_ADDRESS_FROM_STEP_5>"
export SENDING_WALLET_ID="<SENDING_WALLEL_ID_FROM_STEP_5>"

curl -X POST "http://localhost:3080/api/v2/$COIN/wallet/$SENDING_WALLET_ID/sendcoins" \
  -H "Authorization: Bearer $BITGO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "'"$RECEIVING_ADDRESS"'",
    "amount": "10000",
    "walletPassphrase": "<A_STRONG_PASSPHRASE>"
  }'
```

#### Step Result

```json JSON
{
  "transfer": {
    "id": "5d3e4c9b1234567890abcdef",
    "coin": "tbtc4",
    "state": "signed",
    "value": -10000,
    "txid": "a1b2c3d4e5f6..."
  }
}
```

The `state` field will progress from `signed` → `pending` → `confirmed` as the testnet broadcasts and confirms the transaction.

## Next Steps

You've completed the core flow. From here, explore:

* **[Create Policies](/docs/policies-overview)** — Add approval rules, spending limits, and whitelists.
* **[Set Up Webhooks](/docs/webhooks-overview)** — Get notified about deposits, withdrawals, and policy triggers.
* **[Fund Gas Tanks](/docs/get-started-gas-tanks)** — Required before transacting with EVM-based tokens.
* **[Staking](/docs/stake-overview)** — Earn rewards on supported assets.

## See Also

* [API Reference: Get user](/reference/userget)
* [API Reference: Generate wallet](/reference/expresswalletgenerate)
* [API Reference: Send coins](/reference/expresswalletsendcoins)
* [Install SDK](/docs/get-started-sdk-install)
* [Install BitGo Express](/docs/get-started-express-install)
