Skip to main content

Vocareum REST API v2 — Endpoint Reference

Complete endpoint reference for all 66 Vocareum API v2 endpoints including request/response examples for courses, assignments, parts, resources, grades, users, LTI, and more.

Written by David
Updated yesterday

For Admins & Developers

Complete endpoint reference for the Vocareum REST API v2. For authentication setup, see Vocareum REST API.

Postman Collection
This API documentation is also available as an interactive Postman collection: Vocareum API v2 on Postman.

If you are unable to access the Postman link (e.g. due to network restrictions in your region), this article contains the same complete endpoint reference as of April 10, 2026. Please contact support@vocareum.com if you need the Postman collection JSON file shared directly.

Quick Reference

Base URL: https://api.vocareum.com/api/v2/
Auth: Authorization: Token YOUR_TOKEN
Rate Limit: 800 req/min
Pagination: page param (default 0), 10 per page

Endpoints

Courses

GET Courses

https://api.vocareum.com/api/v2/courses

Request list of courses.

Request Body:

{"page": "1"}

Response (200):

{"status":"success","courses":[{"id":"4091","name":"Sample Course","start_date":"Mar-14-2019","end_date":"Dec-31-2019","uselti":true,"timezone":"America/Los_Angeles","cloud_enabled":true,"awsregion":"us-west-2"}]}

POST Courses - Clone

https://api.vocareum.com/api/v2/courses

Creates a duplicate copy of an existing course. Method: copy or reference. Returns transactionid.

Request Body:

{"method":"copy","name":"MyCourse Copy","source":"{source-courseid}","orgid":"{target-orgid}","start_date_utc":"2018-06-27","end_date_utc":"2018-12-31","timezone":"{timezone}","inherit_publish":"1","teacher_emails":"t1@email.com","awsregion":"us-east-1","lti_anonymous":false}

Response (202):

{"status":"success","message":"Started","transactionid":"21","objid":"5681"}

GET Course

https://api.vocareum.com/api/v2/courses/#{{courseId}}

Request details for a specified course.

PUT Course - Settings

https://api.vocareum.com/api/v2/courses/#{{courseId}}

Update settings: name, orgid, awsregion, teacher_emails, teacher_editable, uselti, timezone, start/end dates, cloud_enabled, show_all_submissions, noworkarea, lti_anonymous, enable_grading, feedback, update_children.

Response (202):

{"status":"success","message":"Started","transactionid":"2325","objid":"4091"}

PUT Course - Assignment Ordering

https://api.vocareum.com/api/v2/courses/#{{courseId}}

Reorder assignments. Body: {"assignments_order": [["1","46178"],["2","46181"]]}

Assignments

GET Assignments

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments

List all assignments in a course. Supports page param.

GET Assignment

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}

Get details for a specific assignment.

POST Assignments - Create

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments

Create an assignment. Body: {"method":"create","name":"assignment name"}

POST Assignments - Copy

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments

Copy an assignment. Body: {"method":"copy","source":"{assignmentId}","name":"copy name"}

PUT Assignment - Settings

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}

Update: name, description, nosubmit, publish, publish_grades, auto_submit, grading_on_submit, noworkarea, exam_mode, exam_duration, num_attempts, show_end_exam_button, copy_startercode, uncompressupload, lti_on, anonymous_grading, grading_visibility, send_webhook, live_code_comments.

DELETE Assignments

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}

Delete an assignment.

Parts

GET Parts

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts

List parts for an assignment. Returns: id, name, seqnum, part_url, cloud_labs, session_length, budgets.

GET Part

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}

Get details for a specific part.

POST Part - Create

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/

Create a part. Required: method, name, labtype, lab_interface. Optional: container_image.

Request Body:

{"method":"create","name":"part name","labtype":"Vocareum Elite","lab_interface":{"panels":["Source","Console"],"controls":["Reset","Start Button"]}}

POST Part - Copy

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/

Copy a part. Body: {"method":"copy","source":"{partId}","name":"part copy"}

PUT Part - Update

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}

Update part: name, content (target, url/zipcontent, reset), update, cloud_labs, budgets, session_length, deadlinedate, endlab, labtype, container_image, lab_interface, databricks settings, tags.

DELETE Part

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}

Delete a part.

Part User Details

GET Part - User Details

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/part_details/#{{userId}}

Retrieve student details and SSO URL for a given part.

POST Part - User Details

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/part_details/#{{userId}}

Set student details, e.g. custom environment variables via custom_env.

Request Body:

{"custom_env":{"VOC_ANTHROPIC_TEST_VAR":"test-value","VOC_OPENAI_TEST_VAR":"test-key"}}

Rubrics

GET Part - Rubrics

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/rubrics

List all rubrics for a part. Returns: id, name, seqnum, maxscore, exclude, auto.

GET Part - Rubric

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/rubrics/#{{rubricId}}

Get a specific rubric.

POST Part - Rubric - Add

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/rubrics

Add rubrics. Body: {"rubrics":[{"name":"Test1","maxscore":"10","exclude":"0","auto":"1"}]}

PUT Part - Rubric - Update

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/rubrics

Update rubrics. Required: id. Optional: name, maxscore, exclude, auto.

DELETE Part - Rubric - Delete

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/rubrics

Delete rubrics. Body: {"rubrics":[{"id":"232999"}]}

Files

GET Part - Files

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/files?filename=asnlib/public/test.txt

Get download URL for a specific file. Paths: asnlib, docs, scripts, startercode, lib (Elite) or docs, scripts, startercode, private, course, data (container).

GET Part - Files (list)

https://api.vocareum.com/api/v2/courses/#{{courseid}}/assignments/#{{assignmentid}}/parts/#{{partid}}/files?dir=/work&list=true

List files in a directory. Params: dir, list, exclude[], includeHidden.

GET Part - Files (download)

https://api.vocareum.com/api/v2/courses/#{{courseid}}/assignments/#{{assignmentid}}/parts/#{{partid}}/files?dir=/work

Download a directory as zip. Returns transactionid; poll again with transactionid to get URL.

Release

PUT Part - Release

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/release

Release Jupyter notebooks or quizzes. Body: type (jupyter|quiz), zipfile (base64), plus options like extract_rubrics, generate_grading_script, html_feedback, update.

Resources

GET Resources

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/resources/#{{userId}}

Get all resources for a user's part. Returns session times, cloud data (AWS credentials, Azure credentials, GCP data, GenAI data, Databricks info).

PUT Resources - Start

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/resources/#{{userId}}

Start resources. If already started, extends session. Launches CloudFormation templates and issues temp credentials.

POST Resources - Update

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/resources/#{{userId}}

Update budget/state. Body: {"state":"active|inactive","budget":"{float}","apitype":"{int}"} (apitype: 0=openai, 1=azure, 2=llama2, 3=custom)

DELETE Resources - Terminate

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/resources/#{{userId}}

End or terminate resources. Body: {"action":"end|terminate"}

Grades

PUT Grades

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/grades/#{{userId}}

Set grades. Body: {"grades":{"comment":"...","criterias":{"criterion1":{"score":"5","comment":"..."}}}}

GET Grades

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/grades/#{{userId}}?includeCodeComments=1

Get grades with optional code comments. Returns overall_score, criterias, codeComments.

Users

GET Users

https://api.vocareum.com/api/v2/courses/#{{courseId}}/users

List users. Params: role (student|teacher|grader), include_dropped, organization_terms_agreed, page.

POST Users - Enroll

https://api.vocareum.com/api/v2/courses/#{{courseId}}/users

Enroll user. Required: email OR client_key + client_userid. Optional: name, role, section_name, external_id.

DELETE Users - Drop

https://api.vocareum.com/api/v2/courses/#{{courseId}}/users/#{{userId}}

Drop a user from a course.

Submissions

GET Submissions

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/submissions/#{{userId}}

Get student submission as base64-encoded zip (zipfilecontent).

Transactions

GET Transaction

https://api.vocareum.com/api/v2/transaction/#{{transactionId}}

Check status of async operations. Returns: state (success/pending/failed), objid, message.

Organization Users

DELETE Organization - Remove Users

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/users/#{{userid}}?role=teacher

Remove educator from all courses. Only role=teacher supported.

GET User's LTI Information

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/org_users/#{{userid}}

Get a user's LTI info across all courses in the org. Returns lti_user_id per course.

LTI Clients

GET ORG LTI Client Information

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/lti_clients

Get all LTI client configs for an org. Returns issuer, client_id, key_set_url, deployment_ids, accessible_courses.

GET Course LTI Client Information

https://api.vocareum.com/api/v2/courses/#{{courseid}}/lti_clients

Get LTI clients used by a specific course.

POST Create/Update LTI Client Information

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/lti_clients

Create or update LTI client. Body: name, issuer, client_id, key_set_url, oidc_authentication_url, oauth_token_url, accessible_courses, deployment_ids.

PUT Add Course to LTI Client

https://api.vocareum.com/api/v2/courses/#{{courseid}}/lti_clients/#{{lti_client_entry_id}}

Add a course to an LTI client's accessible courses.

DELETE Remove Course from LTI Client

https://api.vocareum.com/api/v2/courses/#{{courseid}}/lti_clients/#{{lti_client_entry_id}}

Remove a course from an LTI client's accessible courses.

Custom Roles

GET Custom Roles

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/custom_roles

Get org-level custom roles.

POST Custom Roles

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/custom_roles

Create a custom role. Body: {"name":"Support","permissions":{"course":["clone"],"labbudget":["time","cost"]}}

PUT Custom Roles

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/custom_roles/#{{custom_role_id}}

Update a custom role's name and/or permissions.

DELETE Custom Roles

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/custom_roles/#{{custom_role_id}}

Delete a custom role.

Custom Role Users

GET Custom Role Users

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/custom_role_users?email=#{{email}}

Get custom roles assigned to a user.

POST Custom Role Users

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/custom_role_users

Add user to a role. Body: {"crid":1,"email":"user@test.com"}

DELETE Custom Role Users

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/custom_role_users

Remove user from a role. Body: {"crid":1,"email":"user@test.com"}

AI Assistants

GET Assistants (List)

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/assistants

List all assistants you have author access to.

GET Assistant (Detail)

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/assistants/#{{assistantid}}

Get detailed info: name, api_key, published, indexing, authors, courses.

POST Assistants - Create

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/assistants

Create assistant. Required: name. Optional: key_name, description, context, restrict_sources, link_sources, memory_enabled, zipfile, build, publish, share (authors, users, courses, org).

PUT Assistants - Update

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/assistants/#{{assistantid}}

Modify assistant. All fields optional. Additional: replace_files (0|1) to clear existing files before upload.

S3 Access

GET S3 Labs (Org Analytics)

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/s3_labs

Get temp AWS credentials for org-level lab analytics S3 bucket. Org admin only. Must be enabled — email support@vocareum.com.

GET S3 (Course Content)

https://api.vocareum.com/api/v2/courses/#{{courseid}}/s3

Get temp AWS credentials for course content S3 bucket.

Batch Script

POST Batch Script - Run

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/batch_script

Run a verification script. Body: {"scope":"verification","script":"base64_encoded_script"}. Returns id to poll status.

GET Batch Script - Status

https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/batch_script/#{{id}}

Get script status. States: Queued, Picked, Running, Completed, Killed, Server not found, Error, Cancelled. Returns exitstatus and base64 output.

AWS Usage

GET AWS Usage

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/aws_usage

Get AWS account usage: unused/used/closed/discarded/fraud counts, payer count, total cost.

Containers

GET Containers

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/containers

List all container images for the org. Returns: id, name, lab_type, host, repo, tag, access ports.

POST Containers - Create

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/containers

Create container image. Required: name, host, repo, tag, access [{name, type, port, urlparams}]. Optional: courseid.

DELETE Containers

https://api.vocareum.com/api/v2/orgs/#{{orgid}}/containers/#{{containerid}}

Delete a container image.

Did this answer your question?