Contents
1. Overview
The SchoolScan API is a RESTful JSON API. All requests and responses use JSON. All endpoints require authentication. The API is designed for integration with:
- District business intelligence tools (Power BI, Tableau, Looker)
- Compliance management systems and dashboards
- SIS and data-warehouse pipelines
- Ticketing and remediation workflows (ServiceNow, Jira)
- Custom internal tools
API access is included in the standard SchoolScan subscription. Request credentials by emailing hello@schoolscan.ai.
2. Authentication
Authentication is via bearer tokens provisioned per district. Include the token in the Authorization header of every request.
Tokens grant full API access for the issuing district and should be treated as secrets. Rotate tokens immediately if one is exposed. Tokens can be scoped to specific permissions (read-only, scan-trigger, admin) via the settings page.
3. Rate Limits
API requests are rate-limited per district:
- Read endpoints (GET): 300 requests per minute
- Write endpoints (POST, PATCH, DELETE): 60 requests per minute
- Scan triggers: 5 concurrent scans per district
Rate-limit state is returned in response headers: X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset (Unix timestamp). A 429 Too Many Requests response indicates you should back off and retry after the reset time.
4. Scans
List scans
Returns a paginated list of scans. Supports ?status=, ?domain=, and ?created_after= filters.
Retrieve a scan
Start a scan
Triggers a new scan of a configured domain. The domain must be registered under your district account. Returns a scan_id you can poll or subscribe to via webhook.
Cancel a scan
5. Findings
List findings
Filters: ?scan_id=, ?severity=critical|high|medium|low, ?status=open|reviewing|resolved, ?domain_type=direct_pii|reidentification|directory_info|education_records|metadata|vendor_exposure.
Retrieve a finding
Update finding status
Change status to reviewing, resolved, or accepted_risk. Include a note explaining the remediation or decision for the audit trail.
6. Reports and Exports
Generate a report
Generates a compliance report from a completed scan. Supported formats: pdf, csv, json, markdown.
Download an export
Returns a time-limited signed URL for the report. URLs expire after 15 minutes.
7. Webhooks
Webhooks push events to your endpoint rather than requiring polling. Supported events:
scan.started— a scan has begunscan.completed— a scan has finished and findings are availablefinding.critical— a new critical finding was identifiedfinding.expert_reviewed— a finding has been reviewed by privacy staff
Configure webhook endpoints in the settings page. Webhook payloads are signed with HMAC-SHA256; verify the signature using the X-SchoolScan-Signature header and your webhook secret.
8. Errors
Standard HTTP status codes are used:
200— Success201— Created (scan triggered, finding updated)400— Bad Request (malformed payload, invalid parameters)401— Unauthorized (missing or invalid token)403— Forbidden (token lacks permission for the resource)404— Not Found429— Rate limit exceeded500— Server error (retry with backoff)
Error responses include a structured body:
9. Versioning
The API is versioned in the URL path (/v1/). Breaking changes are introduced only in new versions. Minor additions (new fields, new endpoints) may be added to the current version without notice. SchoolScan will provide at least 12 months of advance notice before deprecating a version.
10. SDKs and Tools
We maintain lightweight client libraries:
- Python —
pip install schoolscan - Node.js —
npm install @schoolscan/client - Postman Collection — available on request
- OpenAPI Specification —
https://api.schoolscan.ai/v1/openapi.json
Need API access?
API access is included with every SchoolScan subscription. Our team can also help you build integrations with your existing compliance or BI tools.
Request API Access