Skip to content

Client Reference

Complete reference for every method on the StudyPlug client. All methods return promises and throw typed errors on failure (see Error Handling).

import { StudyPlug } from "studyplug";
const sp = new StudyPlug(options?: StudyPlugOptions);
OptionTypeDefaultDescription
apiKeystringAPI key sent as X-StudyPlug-Key header
baseUrlstring"https://api.studyplug.org"API base URL
timeoutnumber30000Request timeout in ms
maxRetriesnumber2Automatic retries on 429
fetchtypeof fetchglobalThis.fetchCustom fetch implementation

Check API availability.

const result = await sp.health();
// { status: "ok", timestamp: "2026-02-23T...", uptime: 86400 }

Returns: Promise<{ status: string; timestamp: string; uptime: number }>


List all grade levels.

const { data, meta } = await sp.grades.list();
// data.grades: GradeSummary[]

Returns: Promise<ApiResponse<{ grades: GradeSummary[] }>>

Get a grade by slug, including its subjects.

const { data } = await sp.grades.get("grade-3");
// data.grade: GradeDetail (includes grade.subjects)
ParamTypeDescription
slugstringGrade slug (e.g. "kindergarten", "grade-3")

Returns: Promise<ApiResponse<{ grade: GradeDetail }>>


List all subjects.

const { data } = await sp.subjects.list();
// data.subjects: SubjectSummary[]

Returns: Promise<ApiResponse<{ subjects: SubjectSummary[] }>>

Get a subject by slug, including its topics.

const { data } = await sp.subjects.get("math");
// data.subject: SubjectDetail (includes subject.topics)
ParamTypeDescription
slugstringSubject slug (e.g. "math", "reading")

Returns: Promise<ApiResponse<{ subject: SubjectDetail }>>


List and filter topics with optional pagination.

const { data, pagination } = await sp.topics.list({
subject: "math",
grade: "grade-3",
});
// data.topics: TopicSummary[]
ParamTypeDescription
subjectstringFilter by subject slug
gradestringFilter by grade slug
qstringFull-text search
pagenumberPage number (default 1)
pageSizenumberItems per page (default 20)

Returns: Promise<ApiResponse<{ topics: TopicSummary[] }>>


Search and filter skills with pagination.

const { data, pagination } = await sp.skills.list({
grade: "grade-3",
subject: "math",
topic: "addition",
q: "within",
});
ParamTypeDescription
gradestringFilter by grade slug
subjectstringFilter by subject slug
topicstringFilter by topic slug
qstringFull-text search
pagenumberPage number (default 1)
pageSizenumberItems per page (default 20)

Returns: Promise<ApiResponse<{ skills: SkillSummary[] }>>

Get a skill by slug, including standards and available grades.

const { data } = await sp.skills.get("add-within-10");
// data.skill: SkillSummary
// data.availableGrades: Array<{ slug, name, order }>
ParamTypeDescription
slugstringSkill slug (e.g. "add-within-10")

Returns: Promise<ApiResponse<SkillDetail>>


Browse and search educational standards.

const { data, pagination } = await sp.standards.list({
framework: "CCSS-Math",
q: "fluently add",
});
ParamTypeDescription
frameworkstringFilter by framework (e.g. "CCSS-Math", "CCSS-ELA", "NGSS")
gradenumberFilter by grade number
qstringFull-text search
pagenumberPage number (default 1)
pageSizenumberItems per page (default 20)

Returns: Promise<ApiResponse<{ standards: StandardSummary[] }>>

Get a standard by code with its mapped skills.

const { data } = await sp.standards.get("3.OA.C.7");
// data.standard: StandardDetail (includes standard.skills)
ParamTypeDescription
codestringStandard code (e.g. "3.OA.C.7")

Returns: Promise<ApiResponse<{ standard: StandardDetail }>>


Generate a batch of content items with an answer key.

const { data, meta } = await sp.generate({
skill: "add-within-10",
count: 5,
seed: 42,
});
// data.items: ContentItem[]
// data.answerKey: AnswerKeyEntry[]
ParamTypeDescription
skillstringSingle skill slug
skillsstring[]Multiple skill slugs
standardstringSingle standard code
standardsstring[]Multiple standard codes
gradestringGrade slug filter
subjectstringSubject slug filter
countnumberNumber of items (1-50, default 10)
seednumberSeed for deterministic output

Provide at least one of skill, skills, standard, or standards.

Returns: Promise<GenerateResponse> ({ data: { items, answerKey }, meta })

Generate exactly one content item.

const { data, meta } = await sp.generate.single({
skill: "add-within-10",
seed: 42,
});
// data.item: ContentItem
// data.answer: AnswerKeyEntry
ParamTypeDescription
skillstringSkill slug (required)
gradestringGrade slug filter
seednumberSeed for deterministic output

Returns: Promise<SingleGenerateResponse> ({ data: { item, answer }, meta })


Every response includes a meta object:

interface ApiMeta {
requestId: string;
generatedAt: string;
seed?: number;
apiVersion: "v1";
cacheHit: boolean;
generationTimeMs?: number;
}

Paginated endpoints also include pagination:

interface Pagination {
page: number;
pageSize: number;
total: number;
hasNext: boolean;
}