Quickstart: Host Your First SCORM Course in 30 Seconds

AllureConnect is SCORM hosting infrastructure for developers and AI tools. Upload a PowerPoint or send JSON — get a hosted, trackable SCORM course.

1. Get Your API Key

Sign up at allureconnect.com and get a sandbox API key instantly — no credit card required.

Your test key starts with ac_test_. When you're ready for production, upgrade and get an ac_live_ key.

2. Create a Course (One API Call)

curl -X POST https://app.allureconnect.com/api/v1/quick-publish \
  -H "Authorization: Bearer ac_test_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Workplace Safety Training",
    "slides": [
      {
        "title": "Introduction",
        "content": "Welcome to the workplace safety training course.\n\nBy the end, you will understand:\n- Fire safety procedures\n- Emergency exit locations\n- First aid basics"
      },
      {
        "title": "Fire Safety",
        "content": "**Key Points:**\n- Know your nearest exit\n- Stay low in smoke\n- Never use elevators during a fire\n- Call 911 immediately"
      },
      {
        "title": "Summary",
        "content": "You have completed the workplace safety training.\n\n*Remember: safety is everyone'\''s responsibility.*"
      }
    ],
    "scorm_version": "2004"
  }'

Response:

{
  "package_id": "pkg_a1b2c3d4e5f6",
  "title": "Workplace Safety Training",
  "scorm_version": "2004",
  "slide_count": 3,
  "created_at": "2026-04-07T12:00:00.000Z"
}

3. Using the SDK

npm install @allureconnect/sdk
import { AllureConnect } from '@allureconnect/sdk';

const ac = new AllureConnect('ac_test_your_key_here');

const course = await ac.courses.create({
  title: 'Safety Training',
  slides: [
    { title: 'Intro', content: 'Welcome to the course.' },
    { title: 'Module 1', content: '- Point A\n- Point B' }
  ]
});

console.log(course.package_id); // pkg_...

4. Convert a PowerPoint

import fs from 'fs';

const pptx = fs.readFileSync('training.pptx');
const job = await ac.conversions.create({
  file: new Blob([pptx]),
  filename: 'training.pptx'
});

// For large files, poll until the job completes
let status = job;
while (status.status !== 'completed' && status.status !== 'failed') {
  await new Promise((r) => setTimeout(r, 2000));
  status = await ac.conversions.get(job.job_id);
}

console.log(status.status);     // "completed"
console.log(status.package_id); // "pkg_..."

What's Next?

Sandbox vs. Production

Sandbox (ac_test_) Production (ac_live_)
Credit card Not required Required
Packages 3 max Per plan (25-unlimited)
Launches 25/month Per plan (5K-unlimited)
Output Watermarked Clean
Expiry 30 days None