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 (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.
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: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.
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.
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.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.
Approval Flow
- Read-Only (Auto-Approved)
- Write Scopes (Human Review)
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
Key Format
Every API key begins with the prefixip_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_ + 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 theX-API-Key request header on every call to /api/v1/:
Example: List Assignments
Python (requests)
TypeScript (fetch)
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
| Property | X-API-Key | Authorization: Bearer |
|---|---|---|
| Who uses it | Third-party developers | IntelliPlan first-party clients |
| Scopes | Exactly what you applied for | All scopes |
| Revocable | Yes, instantly | Only by rotating SECRET_KEY |
| Rate-limited per credential | Yes | No |
| Shown once / stored as hash | Yes | No |
| Intended for public distribution | Yes | No |
Available Scopes
Every scope you can request is listed in the table below. Thewrite column determines whether an application goes to human review.
| Scope | Label | Description | Requires Review |
|---|---|---|---|
read:profile | Read profile | Name, email, and account creation date. | No |
read:assignments | Read assignments | The unified assignment list from every connected source. | No |
read:tests | Read tests | Assignments the student has marked as tests. | No |
read:schedule | Read schedule | Saved study plans and their progress. | No |
read:streak | Read streak | Sparks, streak length, level, and quest state. | No |
read:grades | Read grades | Course grades and GPA from the connected school platform. | No |
read:identity | Read learning profile | Grade level, focus areas, goals, availability. | No |
write:tasks | Create tasks | Add manual tasks, dismiss and restore assignments. | Yes |
write:tests | Mark tests | Mark and unmark assignments as tests. | Yes |
write:schedule | Generate schedules | Run the scheduler and save the resulting plan. | Yes |
write:identity | Update learning profile | Change grade level, focus areas, goals, availability. | Yes |
GET /developers/scopes
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 onexpected_volume:
| Declared Volume | Requests per Minute |
|---|---|
low | 60 |
medium | 300 |
high | 1,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.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
Roll Response
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
Viewing Your Applications
GET /developers/applications
slots_remaining (how many more keys you can apply for before hitting the 5-key limit).
Application Status Values
Application Status Values
| Status | Meaning |
|---|---|
pending | Submitted, waiting for review (write scopes) or waiting for auto-approval logic (should resolve instantly for read-only). |
active | Approved; the key is live and can authenticate API requests. |
denied | A reviewer declined the application. The denial note (if provided) is in review_note. |
revoked | You or an admin revoked the key. The hash has been cleared. |