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

# Practice invites

> A personal practice link for one person and one job, and what its status and offer mean.

## Create

`POST /api/partner/v1/practice-invites` (scope `practice:write`, `Idempotency-Key` required):

- `email`, `full_name` — the person; the practice account belongs to whoever signs in.
- `job` — `title`, `description`, `country` (ISO 3166-1 alpha-2), and optionally `company_label` (shown to the person;
  "Confidential employer" when omitted) and `location`. EU/EEA countries answer `422 PRACTICE_COUNTRY_NOT_SUPPORTED`.
- `external_ref` — your id for this person or application; repeating it hands back the same live invite.
- `sub_partner_ref` — your cohort, school, branch or client; counts can be read per cohort.
- `sponsorship` — omit for your partnership's sponsorship, or `"none"` for an invite without free days.

The answer carries `id`, the personal `url` (`https://www.interview100x.com/p/{token}` — send it only to this person),
`expires_at` and `offer`.

## The offer

`offer.kind` is `free_days` (with `days`: that many days of free practice for this job), `trial_pass` when your
partnership has no free passes available right now (code, partner or monthly caps), or `none`. It never depends on the
person. Partners are not told whether a person used a free pass before; probing for it is prohibited by the partner
terms.

## Read

`GET /api/partner/v1/practice-invites/{id}` (scope `practice:read`) answers its status — `created`, `opened`,
`signed_up`, `expired` or `cancelled` — never more than signed up. Whether a person practiced or paid is not shared.
