<!-- Generated by scripts/gen-developer-docs.ts from src/developers/content/interview/quickstart.md — do not edit. -->

# Quickstart

> Create a practice invite, send the link, and watch the person land in practice — first in test mode.

Set `INTERVIEW_API_KEY` to your partner key (test keys start with `i100x_test_`). Every sample runs as written.

## 1. Check your key

**curl**

```bash
curl -sS "${INTERVIEW_BASE:-https://www.interview100x.com}/api/partner/v1/me" \
  -H "Authorization: Bearer $INTERVIEW_API_KEY"
```

## 2. Create a practice invite

The job's description is read once to set up the person's practice. `external_ref` is your id for the person;
repeating it hands back the same live invite.

**curl**

```bash
curl -sS -X POST "${INTERVIEW_BASE:-https://www.interview100x.com}/api/partner/v1/practice-invites" \
  -H "Authorization: Bearer $INTERVIEW_API_KEY" \
  -H "Idempotency-Key: practice-crm-42" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "lee.park@example.com",
  "full_name": "Lee Park",
  "external_ref": "crm-42",
  "sub_partner_ref": "spring-cohort",
  "job": {
    "title": "Product Manager",
    "company_label": "Globex",
    "description": "Own the payments roadmap with engineering and design. Ship two launches a quarter.",
    "country": "CA"
  }
}'
```

**Node**

```js
const base = process.env.INTERVIEW_BASE || "https://www.interview100x.com";
const res = await fetch(`${base}/api/partner/v1/practice-invites`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.INTERVIEW_API_KEY}`,
    "Idempotency-Key": "practice-crm-42-node",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "email": "lee.park@example.com",
    "full_name": "Lee Park",
    "external_ref": "crm-42",
    "sub_partner_ref": "spring-cohort",
    "job": {
      "title": "Product Manager",
      "company_label": "Globex",
      "description": "Own the payments roadmap with engineering and design. Ship two launches a quarter.",
      "country": "CA"
    }
  }),
});
// Send invite.url to this person only: it is their personal practice link.
console.log(JSON.stringify(await res.json()));
```

**Python**

```python
import json, os, urllib.request

base = os.environ.get("INTERVIEW_BASE", "https://www.interview100x.com")
body = {
  "email": "lee.park@example.com",
  "full_name": "Lee Park",
  "external_ref": "crm-42",
  "sub_partner_ref": "spring-cohort",
  "job": {
    "title": "Product Manager",
    "company_label": "Globex",
    "description": "Own the payments roadmap with engineering and design. Ship two launches a quarter.",
    "country": "CA"
  }
}
req = urllib.request.Request(
    base + "/api/partner/v1/practice-invites",
    data=json.dumps(body).encode(),
    method="POST",
    headers={
        "Authorization": "Bearer " + os.environ["INTERVIEW_API_KEY"],
        "Idempotency-Key": "practice-crm-42-python",
        "Content-Type": "application/json",
    },
)
with urllib.request.urlopen(req) as res:
    print(json.dumps(json.load(res)))
```

The answer carries the personal `url` (send it to this person only), when it expires, and the `offer` your partnership
can make right now.

## 3. Follow the invite

**curl**

```bash
curl -sS "${INTERVIEW_BASE:-https://www.interview100x.com}/api/partner/v1/practice-invites/$PRACTICE_INVITE_ID" \
  -H "Authorization: Bearer $INTERVIEW_API_KEY"
```

**Node**

```js
const base = process.env.INTERVIEW_BASE || "https://www.interview100x.com";
const res = await fetch(`${base}/api/partner/v1/practice-invites/${process.env.PRACTICE_INVITE_ID}`, {
  headers: { Authorization: `Bearer ${process.env.INTERVIEW_API_KEY}` },
});
console.log(JSON.stringify(await res.json()));
```

**Python**

```python
import json, os, urllib.request

base = os.environ.get("INTERVIEW_BASE", "https://www.interview100x.com")
req = urllib.request.Request(
    base + "/api/partner/v1/practice-invites/" + os.environ["PRACTICE_INVITE_ID"],
    headers={"Authorization": "Bearer " + os.environ["INTERVIEW_API_KEY"]},
)
with urllib.request.urlopen(req) as res:
    print(json.dumps(json.load(res)))
```

The status moves from `created` to `opened` (they visited the link) to `signed_up` (they signed in). Subscribe a
[webhook](/developers/webhooks) to hear about it instead of polling. In test mode the link opens a test page,
`/test/practice/{token}`, with buttons that simulate sign-up, a plan and a practice session.

## 4. Read your monthly counts

**curl**

```bash
curl -sS "${INTERVIEW_BASE:-https://www.interview100x.com}/api/partner/v1/stats?month=2026-09" \
  -H "Authorization: Bearer $INTERVIEW_API_KEY"
```

A month is published on the 1st of the month after next; before that the stats answer 422.
