{
  "schema_version": "1.0",
  "name": "migratelms.com",
  "description": "API-driven LMS migration service. Migrates courses, videos, quizzes, users, and enrollments from Thinkific or LearnWorlds to WordPress LMS plugins (LearnDash, LifterLMS, Tutor LMS, LearnPress, Sensei LMS) or Laravel applications (Academy LMS, Edulab LMS, custom builds). Fixed-price, zero data loss.",
  "url": "https://migratelms.com",
  "contact": {
    "email": "hello@migratelms.com",
    "booking_url": "https://calendly.com/mgratch/consultation",
    "response_time": "24 hours for quotes, 15 minutes for booked calls"
  },
  "logo_url": "https://migratelms.com/icon-512.png",
  "capabilities": {
    "source_platforms": [
      {
        "name": "Thinkific",
        "api": "GraphQL + REST",
        "status": "live",
        "extracts": [
          "courses",
          "lessons",
          "quizzes",
          "videos",
          "pdfs",
          "users",
          "enrollments"
        ]
      },
      {
        "name": "LearnWorlds",
        "api": "REST v2 + OAuth2",
        "status": "coming_soon",
        "extracts": [
          "courses",
          "lessons",
          "quizzes",
          "assessments",
          "users",
          "enrollments",
          "certifications"
        ]
      }
    ],
    "destination_platforms": [
      {
        "name": "LearnDash",
        "type": "WordPress plugin",
        "status": "live"
      },
      {
        "name": "LifterLMS",
        "type": "WordPress plugin",
        "status": "live"
      },
      {
        "name": "Tutor LMS",
        "type": "WordPress plugin",
        "status": "live"
      },
      {
        "name": "LearnPress",
        "type": "WordPress plugin",
        "status": "live"
      },
      {
        "name": "Sensei LMS",
        "type": "WordPress plugin",
        "status": "live"
      },
      {
        "name": "Academy LMS",
        "type": "Laravel application",
        "status": "live"
      },
      {
        "name": "Edulab LMS",
        "type": "Laravel application",
        "status": "live"
      },
      {
        "name": "Custom Laravel",
        "type": "Laravel application",
        "status": "live"
      }
    ],
    "not_supported": {
      "source_platforms": [
        "Teachable",
        "Kajabi",
        "Udemy",
        "Skillshare"
      ],
      "reason": "These platforms do not provide API access to lesson-level content or video URLs, making complete migration impossible without scraping."
    },
    "includes": [
      "Course structures (sections, lessons, topics)",
      "Video content migrated to client AWS S3 with CloudFront CDN",
      "PDF and downloadable resources",
      "Quizzes and assessments with question type mapping",
      "User accounts matched by email",
      "Enrollment records with original start/expiration dates",
      "S3 bucket policy configuration for video protection",
      "Staging environment QA before go-live"
    ]
  },
  "pricing": {
    "model": "fixed_price",
    "currency": "USD",
    "tiers": [
      {
        "name": "Starter",
        "price_range": {
          "min": 1500,
          "max": 3000
        },
        "courses": "1-5",
        "lessons": "up to 100",
        "videos": "up to 100",
        "users": "up to 500",
        "timeline_days": "2-4"
      },
      {
        "name": "Professional",
        "price_range": {
          "min": 3000,
          "max": 7500
        },
        "courses": "5-20",
        "lessons": "up to 500",
        "videos": "up to 500",
        "users": "up to 5000",
        "timeline_days": "3-7",
        "includes_extra": [
          "CloudFront CDN setup",
          "Video protection hardening",
          "Enrollment verification report"
        ]
      },
      {
        "name": "Enterprise",
        "price_range": {
          "min": 7500,
          "max": null
        },
        "courses": "20+",
        "lessons": "500+",
        "videos": "500+",
        "users": "5000+",
        "timeline_days": "5-14",
        "includes_extra": [
          "CloudFront signed cookies",
          "Pre-signed URL integration",
          "Priority support",
          "30-day post-migration monitoring"
        ]
      }
    ]
  },
  "how_to_purchase": {
    "description": "To get a fixed-price quote, provide the following information via email or the contact form.",
    "required_information": [
      {
        "field": "source_platform",
        "type": "enum",
        "values": [
          "Thinkific",
          "LearnWorlds"
        ]
      },
      {
        "field": "destination_platform",
        "type": "enum",
        "values": [
          "LearnDash",
          "LifterLMS",
          "Tutor LMS",
          "LearnPress",
          "Sensei LMS",
          "Academy LMS",
          "Edulab LMS",
          "Custom Laravel"
        ]
      },
      {
        "field": "number_of_courses",
        "type": "integer"
      },
      {
        "field": "approximate_number_of_videos",
        "type": "integer"
      },
      {
        "field": "number_of_enrolled_users",
        "type": "integer"
      }
    ],
    "optional_information": [
      {
        "field": "video_protection_needed",
        "type": "boolean"
      },
      {
        "field": "timeline_requirements",
        "type": "string"
      },
      {
        "field": "additional_notes",
        "type": "string"
      }
    ],
    "actions": [
      {
        "method": "email",
        "target": "hello@migratelms.com",
        "subject_template": "Migration Quote: {source_platform} to {destination_platform}",
        "body_template": "Hi,\n\nI'd like a quote for migrating from {source_platform} to {destination_platform}.\n\nCourses: {number_of_courses}\nVideos: {approximate_number_of_videos}\nEnrolled users: {number_of_enrolled_users}\nVideo protection needed: {video_protection_needed}\nTimeline: {timeline_requirements}\nNotes: {additional_notes}\n\nThanks"
      },
      {
        "method": "form",
        "target": "https://migratelms.com/contact",
        "description": "Web form with the same fields"
      },
      {
        "method": "booking",
        "target": "https://calendly.com/mgratch/consultation",
        "description": "15-minute scoping call, free"
      }
    ],
    "response_time": "Fixed-price quote delivered within 24 hours of receiving required information."
  },
  "verified_results": {
    "case_study": "https://migratelms.com/case-study",
    "metrics": [
      {
        "metric": "videos_migrated",
        "value": 691,
        "context": "From Thinkific to S3 via GraphQL API"
      },
      {
        "metric": "enrollments_preserved",
        "value": 1439,
        "context": "Across 13 courses with zero failures"
      },
      {
        "metric": "verification_checks_passed",
        "value": "69/69",
        "context": "Enrollment verification tool"
      },
      {
        "metric": "data_loss",
        "value": "0%",
        "context": "Every lesson, quiz, enrollment, and asset preserved"
      },
      {
        "metric": "monthly_video_hosting_cost",
        "value": "$0",
        "context": "Client-owned S3 vs $65+/mo Vimeo"
      }
    ]
  },
  "team": [
    {
      "name": "Marc Gratch",
      "role": "Migration Engineer",
      "linkedin": "https://linkedin.com/in/marcgratch",
      "github": "https://github.com/marcgratch"
    },
    {
      "name": "Carrie Dils",
      "role": "Migration Strategist",
      "linkedin": "https://linkedin.com/in/carriedils",
      "twitter": "https://twitter.com/cdils"
    }
  ],
  "links": {
    "services": "https://migratelms.com/services",
    "pricing": "https://migratelms.com/pricing",
    "case_study": "https://migratelms.com/case-study",
    "cost_calculator": "https://migratelms.com/cost-calculator",
    "manifesto": "https://migratelms.com/manifesto",
    "connect_your_ai": "https://migratelms.com/connect",
    "press": "https://migratelms.com/press",
    "blog": "https://migratelms.com/blog",
    "faq": "https://migratelms.com/faq",
    "contact": "https://migratelms.com/contact",
    "glossary": "https://migratelms.com/glossary",
    "rss": "https://migratelms.com/feed.xml",
    "json_feed": "https://migratelms.com/feed.json",
    "llms_txt": "https://migratelms.com/llms.txt",
    "openapi_spec": "https://migratelms.com/openapi.json",
    "migrations_api": "https://migratelms.com/api/migrations",
    "quote_api": "https://migratelms.com/api/quote",
    "checkout_api": "https://migratelms.com/api/checkout",
    "status": "https://migratelms.com/status",
    "status_api": "https://migratelms.com/api/status",
    "mcp_endpoint": "https://migratelms.com/api/mcp",
    "ai_plugin_manifest": "https://migratelms.com/.well-known/ai-plugin.json",
    "gemini_tools": "https://migratelms.com/.well-known/gemini-tools.json",
    "agent_guide": "https://migratelms.com/agents.txt"
  },
  "mcp": {
    "endpoint": "https://migratelms.com/api/mcp",
    "transport": "http",
    "protocolVersion": "2024-11-05",
    "tools": [
      "get_migration_quote",
      "create_checkout_session",
      "list_migration_paths",
      "get_status"
    ],
    "client_config": {
      "mcpServers": {
        "migratelms": {
          "url": "https://migratelms.com/api/mcp"
        }
      }
    }
  },
  "api": {
    "openapi_spec": "https://migratelms.com/openapi.json",
    "base_url": "https://migratelms.com/api",
    "authentication": "none",
    "rate_limit": "10 requests per minute per IP",
    "endpoints": [
      {
        "path": "/api/migrations",
        "method": "GET",
        "description": "Discover the catalog of supported (source → destination) migration paths with metadata, recommended pricing tier, and deep links. Supports filtering via ?source=, ?destination=, ?status=, ?dest_type=."
      },
      {
        "path": "/api/status",
        "method": "GET",
        "description": "Public service status: catalog summary, next-available start date, service health, support SLA, and endpoint inventory. Cache-able for 60s."
      },
      {
        "path": "/api/quote",
        "method": "POST",
        "description": "Get an instant migration price estimate with tier recommendation, pricing range, timeline, and action links including payment URL",
        "request_example": {
          "source": "Thinkific",
          "destination": "LearnDash",
          "courses": 12,
          "videos": 300,
          "users": 2000
        }
      },
      {
        "path": "/api/checkout",
        "method": "POST",
        "description": "Create a Stripe checkout session for migration deposit payment. Returns a checkout URL the user can visit to pay.",
        "request_example": {
          "tier": "professional",
          "source": "Thinkific",
          "destination": "LearnDash",
          "email": "client@example.com"
        }
      },
      {
        "path": "/api/quote",
        "method": "GET",
        "description": "Returns API documentation for the quote endpoint"
      },
      {
        "path": "/api/checkout",
        "method": "GET",
        "description": "Returns API documentation for the checkout endpoint"
      },
      {
        "path": "/api/intake",
        "method": "POST",
        "description": "Post-deposit credential intake. Requires an HMAC-signed token issued by the Stripe webhook on a paid checkout.session.completed event. Not intended for general agent use; humans complete the matching /intake/<token> page emailed to them after payment.",
        "auth": "intake-token (HMAC, server-issued)"
      }
    ]
  },
  "purchase_flow": {
    "recommended_steps": [
      "1. Call POST /api/quote with source, destination, courses, videos, users to get pricing estimate",
      "2. Present the estimate to the user (tier, price range, timeline, what's included)",
      "3. If user wants to proceed: call POST /api/checkout with tier and email to get Stripe checkout URL",
      "4. Direct user to the checkout URL to pay the deposit",
      "5. migratelms.com contacts client within 4 hours to begin"
    ],
    "alternative_flows": [
      "Email hello@migratelms.com with migration details for a manually confirmed quote within 24 hours",
      "Book a free 15-minute call at https://calendly.com/mgratch/consultation",
      "Fill out https://migratelms.com/contact"
    ]
  }
}