# Quickstart

From nothing to a job application you created, moved and then threw away again — six requests against the sandbox, none of which touch real data.

## 1. Create a sandbox key

- Open Settings → Developers.
- Choose the sandbox environment and the read-and-write preset.
- Copy the key. It starts with jat_test_ and is shown once.

Keep it in an environment variable rather than in the commands below. Every example here reads $JAT_KEY.

## 2. Find out who the key acts as

Always the first call. It tells you the environment, the scopes you were actually granted and the organizations the account belongs to — so you never have to guess which of those caused a later refusal.

Read the account behind the key:

```
curl -s https://www.jobapplicationtracking.com/api/v1/me \
  -H "Authorization: Bearer $JAT_KEY"
```

## 3. List the boards

Lists come back as { data, hasMore, nextCursor }. Ids are opaque prefixed strings — brd_3, app_41 — so a value of the wrong kind is refused with a 400 rather than quietly missing.

List your boards:

```
curl -s https://www.jobapplicationtracking.com/api/v1/boards \
  -H "Authorization: Bearer $JAT_KEY"
```

## 4. Create an application

Create an application on a board:

```
curl -s -X POST https://www.jobapplicationtracking.com/api/v1/boards/brd_1/applications \
  -H "Authorization: Bearer $JAT_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "status": "applied",
    "company": { "name": "Northwind Traders" },
    "job": { "title": "Staff Engineer" }
  }'
```

Send an Idempotency-Key on every write you might retry. A repeat of the same key replays the first answer instead of creating a second card, and says so with an Idempotent-Replayed header.

## 5. Move it to another column

Move an application to interviewing:

```
curl -s -X POST https://www.jobapplicationtracking.com/api/v1/applications/app_41/move \
  -H "Authorization: Bearer $JAT_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "interviewing", "position": 0 }'
```

## 6. Put the sandbox back

A reset deletes everything the sandbox tenant owns and seeds the sample world again. It needs the sandbox:manage scope, which only the full-access preset grants.

Reset the sandbox:

```
curl -s -X POST https://www.jobapplicationtracking.com/api/v1/sandbox/reset \
  -H "Authorization: Bearer $JAT_KEY"
```

- [Every endpoint](/developers/reference)
- [What a refusal means](/developers/errors)
- [Scopes and OAuth](/developers/authentication)