Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/UAnirudh/IntelliPlan/llms.txt

Use this file to discover all available pages before exploring further.

Third-party apps that need access to a student’s IntelliPlan data—assignments, grades, schedule, streak, and profile—authenticate with a scoped, revocable API key rather than a session token. This separation is intentional: a session token (Authorization: Bearer …) carries every scope and cannot be revoked without rotating the entire signing secret, making it unsuitable for anything outside IntelliPlan’s own first-party clients (the MCP server, the browser extension). An API key (X-API-Key: ip_live_…) is scoped to exactly what you asked for, rate-limited per key, and can be revoked instantly without touching any other credential.

Applying for a Key

Visit intelliplan.tech/developers while signed in to your IntelliPlan account. The application form asks for four things:
1

App Name and URL

A short, human-readable name (2–120 characters) for your integration and an optional URL where it lives. These appear in the approval email and in the developer dashboard.
2

Use Case Description

At least 40 characters describing what you are building and how it uses student data. This is the text a reviewer reads for write-scope applications — be specific.
3

Scopes

Pick one or more scopes from the scopes table below. Only scopes with write: false are eligible for auto-approval. Any write scope sends the application to human review.
4

Expected Volume

Declare your anticipated request rate: low, medium, or high. This sets your per-minute rate limit ceiling (see Rate Limits).
Your IntelliPlan account must be at least one hour old before an auto-approval can be granted. This prevents a throwaway signup from receiving a live credential in the same minute it was created. The restriction does not apply to human-reviewed applications.
You may hold up to 5 open applications or active keys at a time. Revoke an existing key before applying again if you have reached that limit.

Approval Flow

Applications that request only read-only scopes from an account at least one hour old are approved automatically. The API key is returned in the POST /developers/apply response body and also sent to your contact email.
201 Auto-Approved Response
{
  "status": "approved",
  "message": "Approved. Copy the key now — this is the only time we show it.",
  "key": "ip_live_AbCdEfGhIjKlMnOpQrStUvWxYz012345678901234567",
  "application": {
    "id": 42,
    "app_name": "Study Tracker",
    "scopes": "read:assignments read:streak",
    "status": "active",
    "rate_limit_per_min": 60
  }
}
Copy your key immediately. IntelliPlan stores only the SHA-256 hash of the secret — the plaintext is shown exactly once, at the moment of approval. If you lose the key, you must roll it (see Rolling a Lost Key).

Key Format

Every API key begins with the prefix ip_live_ followed by 43 characters of URL-safe random entropy generated by Python’s secrets.token_urlsafe(32). The full key looks like:
ip_live_AbCdEfGhIjKlMnOpQrStUvWxYz012345678901234567
Only the first ip_live_ + 6 characters are stored as a display prefix so you can identify a key in the dashboard without exposing the secret. The full secret is stored only as a SHA-256 hex digest. An incorrect key produces a lookup miss rather than a timing-sensitive comparison.

Using Your Key in Requests

Pass the key in the X-API-Key request header on every call to /api/v1/:
Example: List Assignments
curl https://intelliplan.tech/api/v1/assignments \
  -H "X-API-Key: ip_live_AbCdEfGhIjKlMnOpQrStUvWxYz012345678901234567"
Python (requests)
import requests

API_KEY = "ip_live_AbCdEfGhIjKlMnOpQrStUvWxYz012345678901234567"

resp = requests.get(
    "https://intelliplan.tech/api/v1/assignments",
    headers={"X-API-Key": API_KEY},
)
resp.raise_for_status()
print(resp.json())
TypeScript (fetch)
const API_KEY = "ip_live_AbCdEfGhIjKlMnOpQrStUvWxYz012345678901234567";

const response = await fetch("https://intelliplan.tech/api/v1/assignments", {
  headers: { "X-API-Key": API_KEY },
});
const data = await response.json();
Only the X-API-Key header is supported for third-party API keys. The Authorization: Bearer … header is reserved for IntelliPlan’s own first-party clients (MCP server, browser extension) that authenticate directly with a user’s credentials. Bearer tokens carry every scope and cannot be revoked individually.

API Key vs Bearer Token

PropertyX-API-KeyAuthorization: Bearer
Who uses itThird-party developersIntelliPlan first-party clients
ScopesExactly what you applied forAll scopes
RevocableYes, instantlyOnly by rotating SECRET_KEY
Rate-limited per credentialYesNo
Shown once / stored as hashYesNo
Intended for public distributionYesNo

Available Scopes

Every scope you can request is listed in the table below. The write column determines whether an application goes to human review.
ScopeLabelDescriptionRequires Review
read:profileRead profileName, email, and account creation date.No
read:assignmentsRead assignmentsThe unified assignment list from every connected source.No
read:testsRead testsAssignments the student has marked as tests.No
read:scheduleRead scheduleSaved study plans and their progress.No
read:streakRead streakSparks, streak length, level, and quest state.No
read:gradesRead gradesCourse grades and GPA from the connected school platform.No
read:identityRead learning profileGrade level, focus areas, goals, availability.No
write:tasksCreate tasksAdd manual tasks, dismiss and restore assignments.Yes
write:testsMark testsMark and unmark assignments as tests.Yes
write:scheduleGenerate schedulesRun the scheduler and save the resulting plan.Yes
write:identityUpdate learning profileChange grade level, focus areas, goals, availability.Yes
read:grades is intentionally separate from read:assignments. An app that only needs to show what is due does not need to know what a student scored. Request only the scopes you actually use — narrower scope applications clear review faster.
You can also fetch the live scope list programmatically:
GET /developers/scopes
curl https://intelliplan.tech/developers/scopes
The response includes auto_approved (the list of read-only scope names), max_keys_per_user (5), and volume_limits (low: 60, medium: 300, high: 1000).

Rate Limits

Rate limits are enforced per API key, not per IP address. The ceiling is set at application time based on expected_volume:
Declared VolumeRequests per Minute
low60
medium300
high1,000
Auto-approved (read-only) keys always start at the low limit of 60 req/min regardless of declared volume. An admin can raise the limit for write-approved keys at review time. expected_volume is self-reported — declaring high with write scopes does not bypass review.
Every approved key tracks last_used_at and a cumulative request_count. If you are rate-limited you will receive a 429 Too Many Requests response.

Rolling a Lost Key

If your key is lost or compromised, roll it immediately. Rolling replaces the secret atomically — the old key stops working the instant the roll succeeds. There is no grace period.
POST /developers/keys/{key_id}/roll
curl -X POST https://intelliplan.tech/developers/keys/42/roll \
  -H "Cookie: session=<your-session-cookie>"
Roll Response
{
  "status": "ok",
  "message": "Rolled. The previous key stopped working just now.",
  "key": "ip_live_NewSecretHere...",
  "application": {
    "id": 42,
    "status": "active"
  }
}
Rolling requires an active browser session (login_required). You cannot roll a key that is in pending or revoked status — only active keys can be rolled.

Revoking a Key

To permanently deactivate a key, call the revoke endpoint. Revoked keys cannot be re-activated; you would need to apply for a new key.
POST /developers/keys/{key_id}/revoke
curl -X POST https://intelliplan.tech/developers/keys/42/revoke \
  -H "Cookie: session=<your-session-cookie>"
Revocation clears the stored key hash immediately so the credential can never match again, even if the plaintext surfaced later.

Viewing Your Applications

GET /developers/applications
curl https://intelliplan.tech/developers/applications \
  -H "Cookie: session=<your-session-cookie>"
The response includes all your applications ordered by creation date, plus slots_remaining (how many more keys you can apply for before hitting the 5-key limit).
StatusMeaning
pendingSubmitted, waiting for review (write scopes) or waiting for auto-approval logic (should resolve instantly for read-only).
activeApproved; the key is live and can authenticate API requests.
deniedA reviewer declined the application. The denial note (if provided) is in review_note.
revokedYou or an admin revoked the key. The hash has been cleared.

Build docs developers (and LLMs) love