Register Course Information

Upload information for multiple courses at once.

POST/api/v1/courses/information#

Request Body

coursesArray of objectsrequired
Course info array
organizationString
Organization identifier
course_idStringrequired
Course unique identifier
course_typeString
Course type (e.g., internet)
course_titleStringrequired
Course title
course_descriptionString
Course description
course_categoriesArray of objects
Category info array
siteStringrequired
Site name
course_category_idStringrequired
Category ID
course_category_parent_idString
Parent category ID
depthNumberrequired
Category depth (starts from 0)
course_category_titleStringrequired
Category name
instructorsArray of objects
Instructor info array
instructorStringrequired
Instructor name
instructor_numberString
Instructor number
course_curriculumObjectrequired
Curriculum. Can contain sections or clips, both optional. An empty object registers a course with no clips, composed at the course level only (course-only).
sectionsArray of objects
Array of sections. Use this to split a course into sections.
section_idStringrequired
Section unique identifier
section_titleStringrequired
Section title
section_descriptionString
Section description
sectionsArray of objects
Sub-sections (nestable)
clipsArray of objects
Clip array
preprocessing_requiredBoolean
Section preprocessing-required flag. Defaults to true. If false, usable immediately without preprocessing.
clipsArray of objects
Array of clips. Use this to place clips directly under the course without sections.
clip_idStringrequired
Clip unique identifier
clip_titleStringrequired
Clip title
clip_descriptionString
Clip description
clip_play_timeNumber
Play time (seconds). Defaults to 0 if omitted
clip_levelNumber
Difficulty (1: Easy, 2: Normal, 3: Hard)
preprocessing_requiredBoolean
Clip preprocessing-required flag. Defaults to true. If false, usable immediately without preprocessing.
preprocessing_requiredBoolean
Course-level preprocessing-required flag. Defaults to true (must complete preprocessing before it is usable in the AI tutor). If false, usable immediately without preprocessing.
thumbnail_urlString
Course thumbnail image URL. Must be http/https; empty string not allowed
course_urlString
Course detail page URL. Must be http/https; empty string not allowed
priceNumber
Course price. Must be 0 or greater

Response Fields

success_coursesArray of stringsrequired
Successfully uploaded course IDs
failed_coursesArray of stringsrequired
Failed course IDs
curl -X POST "https://tap-file-upload-production.coxwave.link/api/v1/courses/information" \
  -H "Content-Type: application/json" \
  -H "TAP-API-KEY: {YOUR_API_KEY}" \
  -d '{
    "courses": [
      {
        "organization": "Branch A",
        "course_id": "1000",
        "course_type": "internet",
        "course_title": "Python Basics",
        "course_description": "Basic Python programming course",
        "preprocessing_required": false,
        "thumbnail_url": "https://cdn.example.com/courses/1000/thumbnail.png",
        "course_url": "https://example.com/courses/1000",
        "price": 49000,
        "instructors": [{ "instructor": "Cox", "instructor_number": "001" }],
        "course_categories": [
          {
            "site": "coxwave",
            "course_category_id": "1",
            "course_category_parent_id": "",
            "depth": 0,
            "course_category_title": "Programming"
          }
        ],
        "course_curriculum": {
          "sections": [
            {
              "section_id": "1000_1",
              "section_title": "Part 1. Python Basics",
              "section_description": "Learn basic Python syntax and data types",
              "preprocessing_required": false,
              "clips": [
                {
                  "clip_id": "1000_1_1",
                  "clip_title": "Variable Declaration",
                  "clip_description": "How to declare variables in Python",
                  "clip_play_time": 450,
                  "preprocessing_required": true
                },
                {
                  "clip_id": "1000_1_2",
                  "clip_title": "Data Types Introduction",
                  "clip_description": "Basic data types (int, str, list, dict)",
                  "clip_play_time": 450,
                  "preprocessing_required": true
                }
              ]
            },
            {
              "section_id": "1000_2",
              "section_title": "Part 2. Control Statements",
              "section_description": "Learn conditionals and loops",
              "preprocessing_required": false,
              "clips": [
                {
                  "clip_id": "1000_2_1",
                  "clip_title": "Conditionals",
                  "clip_description": "Using if, elif, else",
                  "clip_play_time": 450,
                  "preprocessing_required": true
                },
                {
                  "clip_id": "1000_2_2",
                  "clip_title": "Loops",
                  "clip_description": "Using for, while",
                  "clip_play_time": 450,
                  "preprocessing_required": true
                }
              ]
            }
          ]
        }
      }
    ]
  }'
import requests

res = requests.post(
    "https://tap-file-upload-production.coxwave.link/api/v1/courses/information",
    headers={"TAP-API-KEY": "{YOUR_API_KEY}"},
    json={
        "courses": [
            {
                "organization": "Branch A",
                "course_id": "1000",
                "course_type": "internet",
                "course_title": "Python Basics",
                "course_description": "Basic Python programming course",
                "preprocessing_required": False,
                "thumbnail_url": "https://cdn.example.com/courses/1000/thumbnail.png",
                "course_url": "https://example.com/courses/1000",
                "price": 49000,
                "instructors": [
                    {
                        "instructor": "Cox",
                        "instructor_number": "001"
                    }
                ],
                "course_categories": [
                    {
                        "site": "coxwave",
                        "course_category_id": "1",
                        "course_category_parent_id": "",
                        "depth": 0,
                        "course_category_title": "Programming"
                    }
                ],
                "course_curriculum": {
                    "sections": [
                        {
                            "section_id": "1000_1",
                            "section_title": "Part 1. Python Basics",
                            "section_description": "Learn basic Python syntax and data types",
                            "preprocessing_required": False,
                            "clips": [
                                {
                                    "clip_id": "1000_1_1",
                                    "clip_title": "Variable Declaration",
                                    "clip_description": "How to declare variables in Python",
                                    "clip_play_time": 450,
                                    "preprocessing_required": True
                                },
                                {
                                    "clip_id": "1000_1_2",
                                    "clip_title": "Data Types Introduction",
                                    "clip_description": "Basic data types (int, str, list, dict)",
                                    "clip_play_time": 450,
                                    "preprocessing_required": True
                                }
                            ]
                        },
                        {
                            "section_id": "1000_2",
                            "section_title": "Part 2. Control Statements",
                            "section_description": "Learn conditionals and loops",
                            "preprocessing_required": False,
                            "clips": [
                                {
                                    "clip_id": "1000_2_1",
                                    "clip_title": "Conditionals",
                                    "clip_description": "Using if, elif, else",
                                    "clip_play_time": 450,
                                    "preprocessing_required": True
                                },
                                {
                                    "clip_id": "1000_2_2",
                                    "clip_title": "Loops",
                                    "clip_description": "Using for, while",
                                    "clip_play_time": 450,
                                    "preprocessing_required": True
                                }
                            ]
                        }
                    ]
                }
            }
        ]
    },
)
print(res.json())
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body := []byte(`{
	  "courses": [
	    {
	      "organization": "Branch A",
	      "course_id": "1000",
	      "course_type": "internet",
	      "course_title": "Python Basics",
	      "course_description": "Basic Python programming course",
	      "preprocessing_required": false,
	      "thumbnail_url": "https://cdn.example.com/courses/1000/thumbnail.png",
	      "course_url": "https://example.com/courses/1000",
	      "price": 49000,
	      "instructors": [
	        {
	          "instructor": "Cox",
	          "instructor_number": "001"
	        }
	      ],
	      "course_categories": [
	        {
	          "site": "coxwave",
	          "course_category_id": "1",
	          "course_category_parent_id": "",
	          "depth": 0,
	          "course_category_title": "Programming"
	        }
	      ],
	      "course_curriculum": {
	        "sections": [
	          {
	            "section_id": "1000_1",
	            "section_title": "Part 1. Python Basics",
	            "section_description": "Learn basic Python syntax and data types",
	            "preprocessing_required": false,
	            "clips": [
	              {
	                "clip_id": "1000_1_1",
	                "clip_title": "Variable Declaration",
	                "clip_description": "How to declare variables in Python",
	                "clip_play_time": 450,
	                "preprocessing_required": true
	              },
	              {
	                "clip_id": "1000_1_2",
	                "clip_title": "Data Types Introduction",
	                "clip_description": "Basic data types (int, str, list, dict)",
	                "clip_play_time": 450,
	                "preprocessing_required": true
	              }
	            ]
	          },
	          {
	            "section_id": "1000_2",
	            "section_title": "Part 2. Control Statements",
	            "section_description": "Learn conditionals and loops",
	            "preprocessing_required": false,
	            "clips": [
	              {
	                "clip_id": "1000_2_1",
	                "clip_title": "Conditionals",
	                "clip_description": "Using if, elif, else",
	                "clip_play_time": 450,
	                "preprocessing_required": true
	              },
	              {
	                "clip_id": "1000_2_2",
	                "clip_title": "Loops",
	                "clip_description": "Using for, while",
	                "clip_play_time": 450,
	                "preprocessing_required": true
	              }
	            ]
	          }
	        ]
	      }
	    }
	  ]
	}`)
	req, _ := http.NewRequest("POST", "https://tap-file-upload-production.coxwave.link/api/v1/courses/information", bytes.NewBuffer(body))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("TAP-API-KEY", "{YOUR_API_KEY}")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	b, _ := io.ReadAll(res.Body)
	fmt.Println(string(b))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
  public static void main(String[] args) throws Exception {
    String body = """
        {
          "courses": [
            {
              "organization": "Branch A",
              "course_id": "1000",
              "course_type": "internet",
              "course_title": "Python Basics",
              "course_description": "Basic Python programming course",
              "preprocessing_required": false,
              "thumbnail_url": "https://cdn.example.com/courses/1000/thumbnail.png",
              "course_url": "https://example.com/courses/1000",
              "price": 49000,
              "instructors": [
                {
                  "instructor": "Cox",
                  "instructor_number": "001"
                }
              ],
              "course_categories": [
                {
                  "site": "coxwave",
                  "course_category_id": "1",
                  "course_category_parent_id": "",
                  "depth": 0,
                  "course_category_title": "Programming"
                }
              ],
              "course_curriculum": {
                "sections": [
                  {
                    "section_id": "1000_1",
                    "section_title": "Part 1. Python Basics",
                    "section_description": "Learn basic Python syntax and data types",
                    "preprocessing_required": false,
                    "clips": [
                      {
                        "clip_id": "1000_1_1",
                        "clip_title": "Variable Declaration",
                        "clip_description": "How to declare variables in Python",
                        "clip_play_time": 450,
                        "preprocessing_required": true
                      },
                      {
                        "clip_id": "1000_1_2",
                        "clip_title": "Data Types Introduction",
                        "clip_description": "Basic data types (int, str, list, dict)",
                        "clip_play_time": 450,
                        "preprocessing_required": true
                      }
                    ]
                  },
                  {
                    "section_id": "1000_2",
                    "section_title": "Part 2. Control Statements",
                    "section_description": "Learn conditionals and loops",
                    "preprocessing_required": false,
                    "clips": [
                      {
                        "clip_id": "1000_2_1",
                        "clip_title": "Conditionals",
                        "clip_description": "Using if, elif, else",
                        "clip_play_time": 450,
                        "preprocessing_required": true
                      },
                      {
                        "clip_id": "1000_2_2",
                        "clip_title": "Loops",
                        "clip_description": "Using for, while",
                        "clip_play_time": 450,
                        "preprocessing_required": true
                      }
                    ]
                  }
                ]
              }
            }
          ]
        }
        """;
    HttpRequest req = HttpRequest.newBuilder()
        .uri(URI.create("https://tap-file-upload-production.coxwave.link/api/v1/courses/information"))
        .header("Content-Type", "application/json")
        .header("TAP-API-KEY", "{YOUR_API_KEY}")
        .POST(HttpRequest.BodyPublishers.ofString(body))
        .build();
    HttpResponse<String> res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
    System.out.println(res.body());
  }
}
const res = await fetch("https://tap-file-upload-production.coxwave.link/api/v1/courses/information", {
  method: "POST",
  headers: {"Content-Type": "application/json", "TAP-API-KEY": "{YOUR_API_KEY}"},
  body: JSON.stringify({
    "courses": [
      {
        "organization": "Branch A",
        "course_id": "1000",
        "course_type": "internet",
        "course_title": "Python Basics",
        "course_description": "Basic Python programming course",
        "preprocessing_required": false,
        "thumbnail_url": "https://cdn.example.com/courses/1000/thumbnail.png",
        "course_url": "https://example.com/courses/1000",
        "price": 49000,
        "instructors": [
          {
            "instructor": "Cox",
            "instructor_number": "001"
          }
        ],
        "course_categories": [
          {
            "site": "coxwave",
            "course_category_id": "1",
            "course_category_parent_id": "",
            "depth": 0,
            "course_category_title": "Programming"
          }
        ],
        "course_curriculum": {
          "sections": [
            {
              "section_id": "1000_1",
              "section_title": "Part 1. Python Basics",
              "section_description": "Learn basic Python syntax and data types",
              "preprocessing_required": false,
              "clips": [
                {
                  "clip_id": "1000_1_1",
                  "clip_title": "Variable Declaration",
                  "clip_description": "How to declare variables in Python",
                  "clip_play_time": 450,
                  "preprocessing_required": true
                },
                {
                  "clip_id": "1000_1_2",
                  "clip_title": "Data Types Introduction",
                  "clip_description": "Basic data types (int, str, list, dict)",
                  "clip_play_time": 450,
                  "preprocessing_required": true
                }
              ]
            },
            {
              "section_id": "1000_2",
              "section_title": "Part 2. Control Statements",
              "section_description": "Learn conditionals and loops",
              "preprocessing_required": false,
              "clips": [
                {
                  "clip_id": "1000_2_1",
                  "clip_title": "Conditionals",
                  "clip_description": "Using if, elif, else",
                  "clip_play_time": 450,
                  "preprocessing_required": true
                },
                {
                  "clip_id": "1000_2_2",
                  "clip_title": "Loops",
                  "clip_description": "Using for, while",
                  "clip_play_time": 450,
                  "preprocessing_required": true
                }
              ]
            }
          ]
        }
      }
    ]
  }),
});
console.log(await res.json());
Response
{
  "success_courses": ["1000"],
  "failed_courses": []
}