Interview100x
Partners · DevelopersOpenAPIBecome a partner
Menu
On this page
  1. 1. Check your key
  2. 2. Create a practice invite
  3. 3. Follow the invite
  4. 4. Read your monthly counts

Interview100x partner API v1

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

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

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

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

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

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

Node

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

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 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

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.

View as Markdown · OpenAPI · llms.txt · Partner terms