Back to Alchemy
Alchemy RecipeIntermediateworkflow

Educational course content generation and assessment creation

24 March 2026

Introduction

Creating educational content at scale is hard. You spend hours writing course material, then more hours building assessment questions, then even more time converting everything into study materials. Each step is manual, and data never quite flows cleanly between tools. You copy text from your notes into a course builder, paste the same content into an assessment tool, then start again with flashcards. By the time you're done, you've spent three times longer than necessary.

This workflow solves that problem by automating the entire pipeline from raw course content through to polished assessments and study decks. Once you set it up, you write your content once and watch it flow through AnkiDeck's AI for flashcard generation, Copy.ai for assessment question creation, and Rember for knowledge base storage. No copy-pasting, no manual transfers, just content moving automatically between systems.

The workflow is intermediate difficulty because it touches multiple APIs and requires some light configuration, but we'll walk through each step with real examples. You'll need either Zapier, n8n, Make, or Claude Code to orchestrate everything. If you've connected APIs before, you'll find this straightforward.

The Automated Workflow

What We're Building

The workflow captures raw educational content (lecture notes, course outlines, or text from any source), generates multiple derivative products automatically, and stores them where they belong: assessments in Copy.ai, flashcards in AnkiDecks AI, and permanent knowledge records in Rember. Each tool works in sequence, passing data forward without you touching anything.

Here's the sequence:

  1. Content enters the system via a webhook or form submission
  2. AnkiDecks AI converts it into flashcard decks
  3. Copy.ai generates assessment questions based on the same content
  4. Rember indexes everything for future reference
  5. You receive a summary of what was created

Choosing Your Orchestration Tool

For this workflow, we recommend n8n or Make if you want hosted solutions that are straightforward to set up. Use Zapier if you're already embedded in their ecosystem but note that Zapier's conditional logic is more limited. Claude Code works if you prefer Python and can run it on a schedule via cron or a task service.

The examples below use Make, as it handles multi-step workflows with good visibility into what's happening at each stage.

Setting Up the Trigger

Start by creating a webhook that accepts your course content. When new content arrives, the workflow springs to life.


POST /webhook/course-content
Content-Type: application/json

{
  "title": "Introduction to Machine Learning",
  "content": "Machine learning is a subset of artificial intelligence. Models learn patterns from data without being explicitly programmed. Types include supervised learning, where data is labeled, and unsupervised learning, where we find patterns in unlabeled data.",
  "courseId": "ML101",
  "subject": "Machine Learning"
}

In Make, create a webhook module and set it to listen for POST requests. Map the incoming fields so they're available to downstream steps.

Step 1: Generate Flashcards with AnkiDecks AI

AnkiDecks AI has an API that accepts content and returns structured flashcard data. You send the educational content and receive back flashcards in Anki format, ready to import.


POST https://api.ankidecks.ai/v1/generate-deck
Authorization: Bearer YOUR_ANKIDECKS_API_KEY
Content-Type: application/json

{
  "title": "ML101 Fundamentals",
  "content": "Machine learning is a subset of artificial intelligence. Models learn patterns from data without being explicitly programmed. Types include supervised learning, where data is labeled, and unsupervised learning, where we find patterns in unlabeled data.",
  "cardCount": 10,
  "difficultyLevel": "intermediate"
}

The response contains a deck ID and the generated cards:


{
  "deckId": "deck_abc123xyz",
  "deckName": "ML101 Fundamentals",
  "cardCount": 10,
  "cards": [
    {
      "front": "What is machine learning?",
      "back": "A subset of artificial intelligence where models learn patterns from data without explicit programming."
    },
    {
      "front": "Name two types of machine learning",
      "back": "Supervised learning (with labeled data) and unsupervised learning (finding patterns in unlabeled data)"
    }
  ],
  "exportUrl": "https://api.ankidecks.ai/decks/deck_abc123xyz/export"
}

In Make, add an HTTP module and configure it to POST to the AnkiDecks endpoint. Map your incoming content to the request body. Store the deckId in a variable for later use.

Step 2: Generate Assessment Questions with Copy.ai

While the flashcards generate, Copy.ai creates assessment questions. Copy.ai's API accepts content and instructions, then returns question sets suitable for quizzes or exams.


POST https://api.copy.ai/v1/generate
Authorization: Bearer YOUR_COPYAI_API_KEY
Content-Type: application/json

{
  "prompt": "Create 5 multiple-choice assessment questions based on this educational content. For each question, provide 4 options and indicate the correct answer. Content: Machine learning is a subset of artificial intelligence. Models learn patterns from data without being explicitly programmed. Types include supervised learning, where data is labeled, and unsupervised learning, where we find patterns in unlabeled data.",
  "model": "gpt-4",
  "temperature": 0.7,
  "maxTokens": 1500
}

Copy.ai returns structured assessment data:


{
  "generatedText": "1. Which of the following best defines machine learning?\nA) Programming rules explicitly for every scenario\nB) A subset of AI where models learn patterns from data\nC) Only used in supervised learning contexts\nD) A replacement for human decision-making\n\nCorrect Answer: B\n\n2. What distinguishes supervised from unsupervised learning?\nA) Supervised uses labeled data; unsupervised finds patterns in unlabeled data\nB) Unsupervised is more accurate\nC) Supervised requires more computation\nD) They are identical\n\nCorrect Answer: A",
  "tokensUsed": 847
}

Add another HTTP module in Make for Copy.ai. Use a formula to construct the prompt from your incoming content. Save the generated questions in a variable.

Step 3: Store in Rember for Long-Term Knowledge

Rember acts as your knowledge base. Send both the original content and the generated assessments to Rember so you can search and reference them later.


POST https://api.rember.ai/v1/memories
Authorization: Bearer YOUR_REMBER_API_KEY
Content-Type: application/json

{
  "content": "Machine learning is a subset of artificial intelligence. Models learn patterns from data without being explicitly programmed. Types include supervised learning, where data is labeled, and unsupervised learning, where we find patterns in unlabeled data.",
  "metadata": {
    "courseId": "ML101",
    "subject": "Machine Learning",
    "createdAt": "2024-01-15T10:30:00Z",
    "contentType": "course-material",
    "deckId": "deck_abc123xyz",
    "assessmentGenerated": true
  },
  "tags": ["machine-learning", "ai", "introductory"]
}

Rember indexes the content and returns:


{
  "memoryId": "mem_def456uvw",
  "indexed": true,
  "searchable": true,
  "metadata": {
    "courseId": "ML101",
    "subject": "Machine Learning"
  }
}

Add an HTTP module for Rember. Pass the original content, the generated assessment questions, and metadata about what was created.

Step 4: Create a Summary and Notification

Once all three tools have done their work, create a summary notification. This tells you what was created and where to find it.


POST https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
Content-Type: application/json

{
  "text": "Course Content Processed",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*ML101 Fundamentals* successfully processed\n\n:card_index: Flashcard Deck: `deck_abc123xyz` (10 cards)\n:clipboard: Assessment Questions: Generated and stored\n:brain: Knowledge Base: Indexed in Rember as `mem_def456uvw`"
      }
    }
  ]
}

In Make, add a Slack module or a generic HTTP module to send the summary. Include the deck ID, memory ID, and question count so you know exactly what was created.

Full Make Configuration

Your Make workflow should look like this:

  1. Webhook (incoming course content)
  2. HTTP module: AnkiDecks API call
  3. HTTP module: Copy.ai API call
  4. HTTP module: Rember API call
  5. Slack/HTTP module: Summary notification

Use Make's built-in formatters to transform data between steps. For example, use the markdown to text formatter if Copy.ai returns markdown-formatted questions but you need plain text for Rember.

The Manual Alternative

If you prefer more control over the process, or if you want to review generated content before it goes into your systems, you can run parts of this workflow semi-manually.

Submit your course content to a Google Form instead of a webhook. Use a Google Sheets integration in Make to read responses. At each stage, send content to a review email instead of directly to the next tool. You review the flashcards, edit assessment questions, and manually confirm before anything goes into Rember.

This approach is slower, but it gives you quality gates at each step. For high-stakes educational content, this might be worth the extra time. For internal training or rapid iteration, the fully automated version makes more sense.

Alternatively, use Claude Code to build a Python script that runs locally. You can customise the prompts more easily, test changes quickly, and run the workflow whenever you want without waiting for a hosted service.

Pro Tips

Rate Limits and Throttling

AnkiDecks AI typically allows 100 requests per hour on standard plans. Copy.ai and Rember both have similar constraints. If you're processing many courses at once, stagger your requests. In Make, add a pause module between API calls. Set it to 30 seconds to space out requests evenly.


// In Make, use the "Sleep" module
Sleep for 30 seconds between requests

If you hit rate limits, the workflow will fail. Enable error handling: set up a retry logic that waits 60 seconds and tries again. Most APIs succeed on the second attempt.

Cost Control Through Selective Processing

Not every piece of content needs all three outputs. If you're creating flashcards only, skip the Copy.ai step. Modify your webhook to accept an optional generateAssessments: false parameter. In Make, use a conditional router to skip the Copy.ai HTTP module if this flag is false.


{
  "title": "Advanced ML Topics",
  "content": "...",
  "courseId": "ML201",
  "generateAssessments": false
}

This cuts your API calls in half for content where you don't need assessments yet.

Structuring Prompts for Better Output

Copy.ai's output quality depends heavily on your prompt. Instead of a generic instruction, be specific about format and difficulty level. Include the target audience.


POST https://api.copy.ai/v1/generate
...
{
  "prompt": "Create 5 multiple-choice assessment questions suitable for beginner-level learners (university first years) on this topic. Each question should have 4 options. Mark the correct answer clearly. Use simple, direct language. Topic: [your content here]",
  ...
}

Better prompts mean fewer unusable results, which saves time reviewing and editing.

Monitoring and Logging

Keep detailed logs of what your workflow creates. Add a Google Sheets module at the end that records: timestamp, course ID, number of flashcards generated, number of questions created, Rember memory ID, and any errors. After running the workflow for a month, you'll see patterns: which courses generate the most cards, how many attempts fail, where bottlenecks occur.

Handling Duplicate Content

If you process the same course multiple times, you'll create duplicate flashcards and memory entries. Before sending to AnkiDecks and Rember, query your systems to check if the content already exists. Rember's API includes a search endpoint.


GET https://api.rember.ai/v1/memories/search?courseId=ML101

If the course already exists, skip the generation steps or update the existing memory instead of creating a new one.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
AnkiDecks AIPro£15Covers 100 deck generations per month. Additional generations cost £0.10 each.
Copy.aiCreator£49Unlimited generations via API using their word credit system. 50,000 words per month typically covers 20-30 assessment sets.
RemberStarter£9Stores up to 10,000 memories. At one memory per course plus metadata, this covers hundreds of courses.
MakePro£1210,000 operations per month. Each workflow run uses roughly 4 operations (one per API call plus overhead). Enough for 2,500 course processes.
ZapierTeam£99Higher cost alternative if you prefer Zapier; less code-heavy configuration.
n8nSelf-hostedFreeIf you run n8n on your own server, cost is only your server time. No per-operation fees.

Total monthly cost for a small team: approximately £85 with Make, or £132 if using Zapier. Self-hosting with n8n reduces this significantly but requires server maintenance.

If you're processing fewer than 100 courses per month, these tools stay well within budget. If you're processing 500 courses monthly, consider upgrading Copy.ai to a higher tier or switching to n8n self-hosted to avoid high orchestration costs.