DocsInstructor Guide

Course Import / Export

Back up, share, and duplicate courses as JSON

You can export any course to a JSON file and re-import it later — to back it up, duplicate it, share it with a colleague, or move it between institutions.

What gets exported:

  • Course metadata (title, description, level, tags, objectives, etc.)
  • Category name
  • Every module, lesson, quiz (with questions), and assignment
  • Pricing, duration, and visibility settings

What doesn't get exported:

  • Student enrollments and progress
  • Quiz attempts and assignment submissions
  • Discussions and announcements
  • Uploaded files (videos, PDFs) — only the URLs are exported
Warning

Because uploaded file URLs aren't rewritten, importing a course between institutions means video/PDF URLs still point at the original storage. Re-upload those files in the new institution if they aren't public.

Exporting a Course

  1. Open any course (Courses → click a course card)
  2. Click Export in the top-right action bar
  3. A course-<slug>-<timestamp>.json file downloads automatically

The file is plain JSON, so you can open it in any text editor, check it into git, or diff two exports to see what changed.

Importing a Course

  1. Go to Courses in the sidebar
  2. Click Import in the top-right action bar (next to New Course)
  3. Select a .json file from the file picker

On success:

  • A new course is created in DRAFT status
  • You're redirected to the new course's overview page
  • Review, edit, and publish when ready
Note

Import always creates a new course. It never overwrites an existing one. If a course with the same slug already exists, the imported course gets -copy appended to its slug.

Use Cases

Backup before a redesign

Export a working course before making major curriculum changes. If something goes wrong, import the backup as a new draft and copy what you need.

Share templates across instructors

A well-designed course makes a great template. Export it, share the JSON file, and let other instructors import it as a starting point.

Move between environments

Build a course in a staging institution, export it, and import it into the live institution when ready.

Duplicate with modifications

Instead of rebuilding a similar course from scratch, export → import → edit the copy.

JSON Format

The export file looks like this (abbreviated):

{
  "version": 1,
  "exportedAt": "2026-04-11T10:30:00.000Z",
  "course": {
    "title": "Biology 101",
    "slug": "biology-101",
    "description": "Introduction to cellular biology",
    "level": "BEGINNER",
    "language": "en",
    "tags": ["biology", "science"],
    "objectives": ["Understand cell structure", "..."],
    "categoryName": "Science",
    "modules": [
      {
        "title": "Week 1: Cells",
        "order": 0,
        "lessons": [
          {
            "title": "Intro to the Cell",
            "type": "VIDEO",
            "videoUrl": "https://...",
            "quiz": null,
            "assignment": null
          }
        ]
      }
    ]
  }
}

The top-level version field is 1 today. Future format revisions will keep backward compatibility — a v1 export will always import cleanly.

Advanced: Editing an Export

Because the JSON is plain text, you can script changes before re-importing:

  • Bulk rename lessons — find-and-replace in the JSON
  • Translate content — run it through a translator and edit
  • Reorder modules — shuffle the modules array
  • Merge two courses — combine their modules arrays into one JSON and import

Just make sure the structure stays valid — prisma db push has already generated the types you'd need to validate against if you're scripting.