Build on IntelliPlan
A REST API for assignments, schedules, tests, and study data — the same data a student sees on their own dashboard, and only ever their own.
How access works
Anyone can create an IntelliPlan account, so being signed in is not a meaningful bar for a student's coursework. Keys are applied for, scoped to what an app actually needs, and revocable one at a time.
Describe what you're building
App name, where it lives, and what it does with the data. A person reads this.
Pick the narrowest scopes
Read-only applications are approved automatically. Anything that writes into a student's account is reviewed.
Copy the key once
We store a hash, never the secret. Lose it and you roll it — we can't send it again.
Apply for a key
Sign in or create an account to apply. Keys are issued against an account so they can be scoped and revoked.
Authentication
Send your key in the X-API-Key header on every request.
curl -H "X-API-Key: $INTELLIPLAN_KEY" \
https://intelliplan.tech/api/v1/assignments
There is a second scheme — POST /api/v1/auth/token exchanges an
email and password for a Bearer token that carries every scope. It exists for
first-party clients (our MCP server, the browser extension) where you are
handing your own password to your own tool. It cannot be revoked
individually, so it is not the right credential for an app other people use.
Endpoints
The machine-readable index lives at /api/v1/docs.
GET /api/v1/health
Liveness. No credential — so you can tell "the API is down" from "my key is wrong" without spending your rate limit.
GET /api/v1/me
The authenticated account, plus which key you are using and what it can do.
read:profile
GET /api/v1/assignments
The unified assignment list from Canvas, StudentVUE, Google Classroom, Notion, and manual tasks.
read:assignments
POST /api/v1/tasks
Create a manual task. {title, due_date?, priority?, course?, estimated_time?, notes?}
write:tasks
POST /api/v1/assignments/dismiss
Mark an assignment done. {title}
write:tasks
POST /api/v1/assignments/restore
Bring a dismissed assignment back. {title}
write:tasks
GET /api/v1/tests
Assignments the student marked as tests.
read:tests
POST · DELETE /api/v1/tests
Mark or unmark an assignment as a test. {title}
write:tests
POST /api/v1/schedule/generate
Build a study plan. {hours_per_day?, preferred_time?, custom_tasks?, assignments?}
write:schedule
GET /api/v1/streak
Sparks, streak length, freezes, level, weekly quests.
read:streak
GET · PATCH /api/v1/identity
The student's learning profile — grade level, focus areas, goals, availability.
read:identity · write:identity
Errors and limits
Every failure uses one shape, and every response carries an X-Request-Id. Quote that id and we can find the exact request.
{
"status": "error",
"error": "insufficient_scope",
"message": "This key is not authorized for that. Missing scope(s): write:tasks.",
"request_id": "9f2c41ab77e0c318"
}
invalid_request · unauthorized ·
insufficient_scope · not_found ·
method_not_allowed · rate_limited ·
upstream_failed · server_error
Limits are counted per key, not per IP — a shared school network is not one
bucket for the whole building. Your ceiling is on every response as
X-RateLimit-Limit. A 429 means back off; it does not
mean the key is in trouble.
Model Context Protocol
An official MCP server ships in the repository at
intelliplan_mcp.py, so an AI assistant can read a student's
assignments and build a plan through the same scoped credential.
IndexNow
IntelliPlan hosts an IndexNow verification key and notifies participating search engines when public URLs change. Protocol guide: /indexnow.
GET /<INDEXNOW_KEY>.txtOwnership verification key file, hosted at the site root.POST /api/admin/indexnow/submitAdmin only — bulk submit from {"urls":[…]}, or the whole sitemap when omitted.GET /api/admin/indexnow/statusAdmin only — key, host, endpoint, and sitemap URL count.