Documentation

Get started with SpedHub

Everything you need to integrate the SpedHub API into your application — from authentication to full CRUD operations on student IEP data.

Introduction

SpedHub is a REST API purpose-built for special education platforms. It provides structured, reliable storage and retrieval of IEP-related student records — including disabilities, services, goals, and accommodations — through a single, predictable integration.

All API responses are JSON. Requests and responses follow consistent patterns across every resource. The base URL for all endpoints is /api.

Base URL/api

API key auth

Authenticate every request with a bearer token in the Authorization header.

Full CRUD

Create, read, update, and delete students, disabilities, goals, services, and accommodations.

Filtering & search

Filter lists by grade, gender, or student ID. Search students by first name.

Relational data

Goals, services, and accommodations are linked to students via foreign keys.

Authentication

All requests to the SpedHub API must include a valid API key in the Authorization header using the Bearer scheme.

API keys are scoped and can be revoked at any time from your dashboard. Never expose your API key in client-side code or public repositories.

HTTP Header
Authorization: Bearer sk_live_••••••••••••••••

401 response when key is missing or invalid

{
  "error": "Unauthorized",
  "message": "Missing or invalid API key"
}

Quickstart

1

Generate an API key

Create an account and generate your first API key from the dashboard.

2

Make your first request

Use curl or any HTTP client to fetch the list of students.

3

Create a student record

POST a new student with firstName, lastName, and gradeLevel.

4

Attach IEP data

Link goals, services, and accommodations to the student via studentId.

curl — list students
curl -X GET /api/students \
  -H "Authorization: Bearer sk_live_••••••••" \
  -H "Accept: application/json"
Response
{
  "data": [
    {
      "id": 1,
      "firstName": "Jordan",
      "lastName": "Rivera",
      "gradeLevel": "4",
      "gender": "non-binary",
      "createdAt": "2026-07-30T18:10:43.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 1
  }
}

Students

The student object is the central resource in SpedHub. All other resources — goals, services, accommodations — are linked to a student via studentId.

Base/api/students
MethodPathDescription
GET/api/studentsList all students
POST/api/studentsCreate a student
GET/api/students/:idRetrieve a student
PUT/api/students/:idUpdate a student
DELETE/api/students/:idDelete a student

Disabilities

Disability records represent IDEA disability classifications. They are independent resources that can be referenced when building student profiles.

Base/api/disabilities
MethodPathDescription
GET/api/disabilitiesList all disabilities
POST/api/disabilitiesCreate a disability
GET/api/disabilities/:idRetrieve a disability
PUT/api/disabilities/:idUpdate a disability
DELETE/api/disabilities/:idDelete a disability

Accommodations

Accommodations are instructional or testing modifications linked to a student. Filter by studentId to retrieve all accommodations for a specific student.

Base/api/accommodations
MethodPathDescription
GET/api/accommodationsList all accommodations
POST/api/accommodationsCreate an accommodation
GET/api/accommodations/:idRetrieve an accommodation
PUT/api/accommodations/:idUpdate an accommodation
DELETE/api/accommodations/:idDelete an accommodation

Goals

IEP goal objects capture the four-part goal structure: timeFrame, condition, behavior, and measurement. Goals are linked to a student via studentId.

Base/api/goals
MethodPathDescription
GET/api/goalsList all goals
POST/api/goalsCreate a goal
GET/api/goals/:idRetrieve a goal
PUT/api/goals/:idUpdate a goal
DELETE/api/goals/:idDelete a goal

Services

Service records describe special education services provided to a student, including type, description, and ISO 8601 start and end times.

Base/api/services
MethodPathDescription
GET/api/servicesList all services
POST/api/servicesCreate a service
GET/api/services/:idRetrieve a service
PUT/api/services/:idUpdate a service
DELETE/api/services/:idDelete a service

Errors & status codes

SpedHub uses standard HTTP status codes to indicate success or failure. All error responses include an error field with a machine-readable code and a message field with a human-readable description.

CodeStatusMeaning
200OKThe request succeeded.
201CreatedA new resource was created successfully.
204No ContentThe resource was deleted. No body is returned.
400Bad RequestThe request body or parameters are invalid.
401UnauthorizedMissing or invalid API key.
404Not FoundThe requested resource does not exist.
409ConflictA resource with the same unique constraint already exists.
500Internal Server ErrorAn unexpected error occurred on the server.

Rate limits

The SpedHub API enforces rate limits to ensure fair usage across all integrations. Limits are applied per API key on a rolling 60-second window.

When a rate limit is exceeded, the API returns a 429 Too Many Requests response. The Retry-After header indicates how many seconds to wait before retrying.

Free

60 requests / minute

Pro

600 requests / minute

Enterprise

Custom

Rate limit response headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1753900800