AI Studies board: staff API

Read everything staff can see on the board (submissions in any state, the AI pre-review, students, their claims, applications and profiles) and record review decisions.

Auth. Every route except this document needs Authorization: Bearer <key>. Make a key on the board's Staff page (Staff accounts → API keys). A key acts as the staff member who made it, and reviews made with it are recorded under their email. read keys can read everything; write keys can also review.

Not here, on purpose: wipes and resets, password resets, staff accounts and résumé files. Those stay on the page.

Rate limit: 300 requests a minute per key.

Try it

curl -H "Authorization: Bearer $AI_STUDIES_KEY" https://ai-7cb616da6b4d4036a5fe5a7dcd8f3266.ecs.us-east-1.on.aws/api/v1/me

Machine-readable: /api/v1/openapi.json

GET /api/v1/me

Who this key acts as

Responses

GET /api/v1/submissions

List submissions

Compact rows: no long details text and no individual findings. Newest first.

ParameterInValues
statequeryqueue | all | pending | approved | changes_requested | rejected

queue is what the review queue shows: pending, plus approved projects edited since.

ownerquerystudent | submitter

student for students' own proposals, submitter for faculty, lab and industry postings.

sourcequeryfaculty | lab | industry | student

coursequerystring

Roster course of the student owner, e.g. AI 1010.

qquerystring

Matches title, owner name, owner email or organisation.

has_repo_linkquerytrue | false

Responses

GET /api/v1/submissions/{id}

One submission, in full

Every part with its full text, who holds each part, the review decision, the AI pre-review with all its findings, and the links found in the text.

ParameterInValues
idpathinteger

Responses

GET /api/v1/students

List or search the roster

ParameterInValues
qquerystring

Part of a name or email.

coursequerystring

sectionquerystring

Responses

GET /api/v1/students/{email}

One student, with everything they submitted

Profile, résumé metadata (not the file), active claims, applications with their statements, and every proposal of their own in full, AI pre-review included.

ParameterInValues
emailpathstring

Responses

POST /api/v1/submissions/{id}/review

Record a review decision (write key)

The same decision as the review queue's buttons. Approving a student's own proposal assigns it to them. A note is required for anything but approval, and is what the submitter reads.

ParameterInValues
idpathinteger

Body

{"verdict":"approved | changes_requested | rejected","note":"string"}

Responses

POST /api/v1/submissions/{id}/semester-project

Mark or unmark a student's proposal as their graded project (write key)

Re-runs the AI pre-review afterwards, because the answer changes which bar it applies.

ParameterInValues
idpathinteger

Body

{"semester_project":"boolean"}

Responses

POST /api/v1/submissions/{id}/prereview

Run the AI pre-review again (write key)

Never approves anything when run this way. Waits for the reviewer, up to two minutes.

ParameterInValues
idpathinteger

Responses