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 (5)
Assignments (6)
Parts (6)
Rubrics (5)
Files (3)
Release (1)
Resources (4)
Grades (3)
Users (3)
Submissions (1)
Transactions (1)
LTI Clients (5)
Custom Roles (4)
AI Assistants (4)
S3 Access (2)
Batch Script (2)
AWS Usage (1)
Containers (3)
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}}/assignmentsList 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}}/assignmentsCreate an assignment. Body: {"method":"create","name":"assignment name"}
POST Assignments - Copy
https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignmentsCopy 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}}/partsList 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}}/rubricsList 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}}/rubricsAdd 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}}/rubricsUpdate rubrics. Required: id. Optional: name, maxscore, exclude, auto.
DELETE Part - Rubric - Delete
https://api.vocareum.com/api/v2/courses/#{{courseId}}/assignments/#{{assignmentId}}/parts/#{{partId}}/rubricsDelete 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.txtGet 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=trueList 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=/workDownload 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}}/releaseRelease 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=1Get grades with optional code comments. Returns overall_score, criterias, codeComments.
Users
GET Users
https://api.vocareum.com/api/v2/courses/#{{courseId}}/usersList users. Params: role (student|teacher|grader), include_dropped, organization_terms_agreed, page.
POST Users - Enroll
https://api.vocareum.com/api/v2/courses/#{{courseId}}/usersEnroll 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=teacherRemove 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_clientsGet 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_clientsGet LTI clients used by a specific course.
POST Create/Update LTI Client Information
https://api.vocareum.com/api/v2/orgs/#{{orgid}}/lti_clientsCreate 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_rolesGet org-level custom roles.
POST Custom Roles
https://api.vocareum.com/api/v2/orgs/#{{orgid}}/custom_rolesCreate 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_usersAdd 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_usersRemove user from a role. Body: {"crid":1,"email":"user@test.com"}
AI Assistants
GET Assistants (List)
https://api.vocareum.com/api/v2/orgs/#{{orgid}}/assistantsList 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}}/assistantsCreate 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_labsGet 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}}/s3Get 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_scriptRun 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_usageGet AWS account usage: unused/used/closed/discarded/fraud counts, payer count, total cost.
Containers
GET Containers
https://api.vocareum.com/api/v2/orgs/#{{orgid}}/containersList 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}}/containersCreate 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.
