# First sandbox read

> Your first read-only calls: metro status, catalog bind, ops who and package list against sandbox.

Source: https://metrocli.com/docs/first-sandbox-read/ · Docs index: https://metrocli.com/llms.txt

With a working sandbox key (`metro init --check` says `working`), you can read your tenant. Nothing on this page writes. Read-only mode allows all of it.

## 1. See what metro can see

```bash
metro status
```

```text
metro status - local command center dashboard.
Operator mode: read-only (reads on, writes off)
Workspace intents: 14; catalog: user-bound-catalog
Catalog allowlist: 20 live reads; 8 sandbox writes
```

`metro status --json` returns the same as JSON, including `liveEndpointAllowlist`: the endpoints metro may read, and the ones it may write on sandbox. `metro mode` shows the current ceiling on its own.

## 2. Learn your catalog

```bash
metro catalog bind --sandbox --write
```

This discovers your rate cards, usage product, credit type and billable metric, and saves their IDs to `~/.metro/profiles.json`. From then on, plans use your real IDs instead of placeholders. Run it again after you change your catalog.

Then read the summary:

```bash
metro tenant snapshot show --sandbox --markdown
```

The snapshot names your account pattern: `dimensional-shared-usage`, `package-template`, `commit-grant-heavy`, `package-and-credits` or `greenfield-needed`. Agents read it before proposing a pricing change.

## 3. Find one customer

`metro ops who` takes a name, UUID, email, external ID or URL:

```bash
metro ops who "Acme Corp" --sandbox
```

```text
Acme Corp
  id: 00000000-0000-4000-8000-000000000001
  external_id: acme-001
  ingest_aliases: ["acme-corp"]
  lookup: name

Active contract(s):
  Growth  00000000-0000-4000-8000-000000000002
    since 2026-12-01T00:00:00.000Z  package=00000000-0000-4000-8000-000000000003

Credits (nonzero):
  Complimentary credits  balance=500

What change do you want? Common next steps:
  metro contract move-plan preflight --customer-id=00000000-0000-4000-8000-000000000001 --to=<package-alias> --prod
  metro ledger-adjustment preflight --amount=<signed-int> --reason="..." --customer-id=00000000-0000-4000-8000-000000000001 --prod
  metro contract extend-trial preflight --extend-by-days=<N> --customer-id=00000000-0000-4000-8000-000000000001 --prod
```

The data above is illustrative. The suggested next steps always print `--prod`; on sandbox, swap it for `--sandbox`. For a stable lookup, pass an ID instead of a name:

```bash
metro customer resolve --ingest-alias=acme-corp --sandbox --json
metro customer balances --ingest-alias=acme-corp --sandbox --only-nonzero --json
```

> **Names are not unique.** A name lookup stops at the first exact match, because Metronome has no server-side name filter. Duplicate names later in the list aren't detected. Pass `--customer-id=` when it matters.

## 4. List packages

```bash
metro package list --sandbox --json
metro package list --search=annual --only-active --sandbox
metro package customers --alias=growth --sandbox --json
```

`package customers` lists the contracts created from a package.

## What you just proved

- The key reaches your sandbox tenant.
- metro can resolve customers, contracts, balances and packages.
- Nothing was written. Writes still need `metro mode write`.

## Next

  - [Architecture primer](https://metrocli.com/docs/concepts/architecture/): How customers, contracts, packages and rate cards connect.
  - [Credits and commits](https://metrocli.com/docs/guides/credits-and-commits/): Your first change, through the full ladder.
