Skip to main content
Version: Next

Reference

Full reference for all constants, types, hooks, and API endpoints in src/lib/api/domains/foundation/self-service-registration.


Constants

Session modes

type RegistrationSessionMode =
| "teacher_self_registration"
| "student_intake"
| "student_verification";

Session statuses

type RegistrationSessionStatus =
| "draft"
| "open"
| "paused"
| "closed"
| "archived";

Roster policies

type RegistrationRosterPolicy =
| "preloaded_only" // only pre-assigned codes allowed
| "open_with_code" // any code holder can submit
| "mixed"; // some pre-assigned, rest open

Audience types

type RegistrationAudienceType = "teacher" | "student";

Access code statuses

type RegistrationAccessCodeStatus =
| "unused"
| "started"
| "submitted"
| "needs_correction"
| "approved"
| "rejected"
| "revoked"
| "expired";

Submission statuses

type RegistrationSubmissionStatus =
| "draft"
| "submitted"
| "needs_correction"
| "resubmitted"
| "approved"
| "rejected"
| "imported"
| "cancelled";

Public next steps

type PublicRegistrationNextStep =
| "complete_form"
| "read_only_status"
| "corrections_required";

Code formats

type RegistrationCodeFormat =
| "human_readable_4_digit" // e.g. "A1B2"
| "human_readable_6_digit"; // e.g. "A1B2C3"

Code delivery methods

type RegistrationCodeDeliveryMethod =
| "print"
| "email"
| "email_and_print";

Import modes

type RegistrationImportMode =
| "update_existing_or_create"
| "update_existing_only"
| "create_new_only";

Manual submission sources

type ManualRegistrationSource =
| "teacher_mobile_paper_capture"
| "admin_paper_capture";

Core type shapes

type RegistrationSession = {
id: string;
tenantId: string;
schoolId: string;
mode: RegistrationSessionMode;
title: string;
description?: string | null;
classDivisionId?: string | null;
gradeLevelId?: string | null;
academicYearId?: string | null;
termId?: string | null;
status: RegistrationSessionStatus;
startsAt?: string | null;
endsAt?: string | null;
requiredFields: Record<string, unknown>;
approvalPolicy: Record<string, unknown>;
rosterPolicy: RegistrationRosterPolicy;
expectedCount: number;
createdBy?: string | null;
updatedBy?: string | null;
createdAt: string;
updatedAt: string;
progress?: RegistrationProgressSummary;
};

React Query hooks

Public (participant-facing)

HookPurpose
useValidateRegistrationAccessCode(options?)Validate an access code and obtain a registration token
usePublicRegistrationMe(token, options?)Load current session + submission state for a token
useSavePublicRegistrationDraft(token, options?)Auto-save draft payload
useSummarizePublicRegistrationDraft(token, options?)Pre-submit validation and summary text
useSubmitPublicRegistration(token, options?)Final submission
useResubmitPublicRegistrationCorrections(token, options?)Resubmit after staff requested corrections

Staff - sessions

HookPurpose
useRegistrationSessions(params?, options?)List sessions with optional filters
useRegistrationSession(id, options?)Get a single session
useCreateRegistrationSession(options?)Create a new session
useUpdateRegistrationSession(options?)Update session metadata
useOpenRegistrationSession(options?)Transition session to open
usePauseRegistrationSession(options?)Transition session to paused
useCloseRegistrationSession(options?)Transition session to closed
useArchiveRegistrationSession(options?)Transition session to archived
useRegistrationSessionProgress(id, options?)Live progress counters for one session

Staff - access codes

HookPurpose
useRegistrationAccessCodes(params?, options?)List access codes
useGenerateRegistrationCodes(options?)Generate new codes for a session
useExportRegistrationCodes(options?)Export/reprint an existing batch
useRevokeRegistrationAccessCode(options?)Revoke a single code

Staff - submissions

HookPurpose
useRegistrationSubmissions(params?, options?)List submissions
useRegistrationSubmission(id, options?)Get one submission
useReviewRegistrationSubmissionFields(options?)Annotate individual fields
useRequestRegistrationCorrection(options?)Send correction request to participant
useRejectRegistrationSubmission(options?)Permanently reject
useApproveRegistrationSubmission(options?)Approve and trigger import
useBulkApproveRegistrationSubmissions(options?)Approve multiple submissions at once
useCreateManualRegistrationSubmission(options?)Paper/admin capture

Staff - dashboards

HookPurpose
useSchoolRegistrationProgress(params?, options?)School-level rollup
useClassTeacherRegistrationDashboard(options?)Class teacher focused view
useMinistryRegistrationProgress(params?, options?)Tenant-wide oversight

Query key factories

All query keys are defined in keys.ts and should be used for cache invalidation:

import {
publicRegistrationKeys,
registrationSessionKeys,
registrationAccessCodeKeys,
registrationSubmissionKeys,
registrationDashboardKeys,
} from "@/lib/api/domains/foundation/self-service-registration";

// Examples
publicRegistrationKeys.me(token) // -> [..., "me", tokenCacheKey]
registrationSessionKeys.detail(tenant, id)
registrationSessionKeys.progress(tenant, id)
registrationSessionKeys.codes(tenant, id, params)
registrationSubmissionKeys.list(tenant, params)

API endpoint summary

All staff endpoints are prefixed with /api/v1/registrations/.
All public endpoints are prefixed with /api/v1/public/registrations/.

Sessions

MethodPathDescription
GET/registrations/sessionsList sessions
POST/registrations/sessionsCreate session
GET/registrations/sessions/{id}Get session
PATCH/registrations/sessions/{id}Update session
POST/registrations/sessions/{id}/openOpen
POST/registrations/sessions/{id}/pausePause
POST/registrations/sessions/{id}/closeClose
POST/registrations/sessions/{id}/archiveArchive
GET/registrations/sessions/{id}/progressProgress summary
POST/registrations/sessions/{id}/codes/generateGenerate codes
POST/registrations/sessions/{id}/codes/exportExport/reprint batch
POST/registrations/sessions/{id}/submissions/bulk-approveBulk approve
POST/registrations/sessions/{id}/manual-submissionsManual capture

Access codes

MethodPathDescription
GET/registrations/access-codesList codes
POST/registrations/codes/{id}/revokeRevoke code

Submissions

MethodPathDescription
GET/registrations/submissionsList submissions
GET/registrations/submissions/{id}Get submission
PATCH/registrations/submissions/{id}/review-fieldsFlag fields
POST/registrations/submissions/{id}/request-correctionRequest correction
POST/registrations/submissions/{id}/rejectReject
POST/registrations/submissions/{id}/approveApprove + import

Dashboards

MethodPathDescription
GET/registrations/dashboards/school-progressSchool rollup
GET/registrations/dashboards/class-teacherClass teacher view
GET/registrations/dashboards/ministry-progressMinistry overview

Public (no auth required, token-based)

MethodPathDescription
POST/public/registrations/access-codes/validateValidate code + get token
GET/public/registrations/meLoad form state
PUT/public/registrations/me/draftSave draft
POST/public/registrations/me/summaryPre-submit validation
POST/public/registrations/me/submitFinal submit
POST/public/registrations/me/correctionsResubmit corrections

Source files

FilePurpose
constants.tsAll enum constants and their TypeScript union types
types.tsAll request/response type contracts
client.tsselfServiceRegistrationApi (staff) and publicSelfServiceRegistrationApi (public)
hooks.tsAll TanStack Query hooks
keys.tsQuery key factories for cache management
index.tsBarrel export