curl --request POST \
--url https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"parent_id": 123,
"title": "<string>",
"description": "<string>",
"status": "<string>",
"completion_criteria": "<string>",
"unlocking_criteria": "<string>"
}
'import requests
url = "https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks"
payload = {
"type": "<string>",
"parent_id": 123,
"title": "<string>",
"description": "<string>",
"status": "<string>",
"completion_criteria": "<string>",
"unlocking_criteria": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: '<string>',
parent_id: 123,
title: '<string>',
description: '<string>',
status: '<string>',
completion_criteria: '<string>',
unlocking_criteria: '<string>'
})
};
fetch('https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => '<string>',
'parent_id' => 123,
'title' => '<string>',
'description' => '<string>',
'status' => '<string>',
'completion_criteria' => '<string>',
'unlocking_criteria' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks"
payload := strings.NewReader("{\n \"type\": \"<string>\",\n \"parent_id\": 123,\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"status\": \"<string>\",\n \"completion_criteria\": \"<string>\",\n \"unlocking_criteria\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"<string>\",\n \"parent_id\": 123,\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"status\": \"<string>\",\n \"completion_criteria\": \"<string>\",\n \"unlocking_criteria\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"<string>\",\n \"parent_id\": 123,\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"status\": \"<string>\",\n \"completion_criteria\": \"<string>\",\n \"unlocking_criteria\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "1234",
"created_at": "2026-10-13T23:11:05Z",
"updated_at": "2026-10-13T23:11:05Z",
"space_id": 123,
"type": "<string>",
"title": "<string>",
"status": "<string>",
"position": 123,
"completion_criteria": "<string>",
"unlocking_criteria": "<string>",
"children_count": 123,
"permalink": "<string>",
"parent_id": 123,
"parent_type": "<string>",
"description": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Create a new coursework item (lesson, quiz, or section)
curl --request POST \
--url https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"parent_id": 123,
"title": "<string>",
"description": "<string>",
"status": "<string>",
"completion_criteria": "<string>",
"unlocking_criteria": "<string>"
}
'import requests
url = "https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks"
payload = {
"type": "<string>",
"parent_id": 123,
"title": "<string>",
"description": "<string>",
"status": "<string>",
"completion_criteria": "<string>",
"unlocking_criteria": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: '<string>',
parent_id: 123,
title: '<string>',
description: '<string>',
status: '<string>',
completion_criteria: '<string>',
unlocking_criteria: '<string>'
})
};
fetch('https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => '<string>',
'parent_id' => 123,
'title' => '<string>',
'description' => '<string>',
'status' => '<string>',
'completion_criteria' => '<string>',
'unlocking_criteria' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks"
payload := strings.NewReader("{\n \"type\": \"<string>\",\n \"parent_id\": 123,\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"status\": \"<string>\",\n \"completion_criteria\": \"<string>\",\n \"unlocking_criteria\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"<string>\",\n \"parent_id\": 123,\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"status\": \"<string>\",\n \"completion_criteria\": \"<string>\",\n \"unlocking_criteria\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mn.co/admin/v1/networks/{network_id}/spaces/{space_id}/courseworks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"<string>\",\n \"parent_id\": 123,\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"status\": \"<string>\",\n \"completion_criteria\": \"<string>\",\n \"unlocking_criteria\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "1234",
"created_at": "2026-10-13T23:11:05Z",
"updated_at": "2026-10-13T23:11:05Z",
"space_id": 123,
"type": "<string>",
"title": "<string>",
"status": "<string>",
"position": 123,
"completion_criteria": "<string>",
"unlocking_criteria": "<string>",
"children_count": 123,
"permalink": "<string>",
"parent_id": 123,
"parent_type": "<string>",
"description": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The ID of the course (space) to create coursework in
The Network's unique integer ID, or subdomain Unique numeric network ID
Body
Submit results as JSON
Coursework items (lessons, quizzes, sections) within a course
The type of coursework to create (lesson, quiz, or section)
The ID of the parent coursework item (section or overview). If omitted, defaults to course overview
The title of the coursework item
The description/body content of the coursework item
The visibility status (posted, hidden, pending). Defaults to hidden
How completion is tracked (none, visited, button, video, primary_media, minimum_correct_percentage). primary_media reports button unless the lesson leads with Mighty audio or video, or a YouTube or mp4 header video link
When content becomes available (none, sequential, time_from_course_join, scheduled_date)
Response
Returns the newly created coursework item
Coursework items (lessons, quizzes, sections) within a course
The record's integer ID
"1234"
The date and time the record was created
"2026-10-13T23:11:05Z"
The date and time the record was last modified
"2026-10-13T23:11:05Z"
The ID of the course (space) this coursework belongs to
The type of coursework (lesson, quiz, section, or overview)
The title of the coursework item
The visibility status (posted, hidden, pending)
The position within siblings (for ordering)
How completion is tracked. A lesson stored as primary_media reports button when it leads with neither Mighty audio or video nor a YouTube or mp4 header video link
When content becomes available
Number of direct children (for sections)
The coursework item's unique address within the Network
The ID of the parent coursework item (section or overview)
The type of the parent (section or overview)
The description/body content of the coursework item