<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bhavesh Pawar</title>
    <description>The latest articles on DEV Community by Bhavesh Pawar (@bhavesh_pawar_8205920953a).</description>
    <link>https://dev.to/bhavesh_pawar_8205920953a</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3869488%2F0d8a7083-5bb0-4949-b1fd-2fc69b484100.png</url>
      <title>DEV Community: Bhavesh Pawar</title>
      <link>https://dev.to/bhavesh_pawar_8205920953a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bhavesh_pawar_8205920953a"/>
    <language>en</language>
    <item>
      <title>LTI vs API for LMS Integration: How to Pick the Right One Before You Build</title>
      <dc:creator>Bhavesh Pawar</dc:creator>
      <pubDate>Thu, 09 Apr 2026 10:23:46 +0000</pubDate>
      <link>https://dev.to/bhavesh_pawar_8205920953a/lti-vs-api-for-lms-integration-how-to-pick-the-right-one-before-you-build-3hoo</link>
      <guid>https://dev.to/bhavesh_pawar_8205920953a/lti-vs-api-for-lms-integration-how-to-pick-the-right-one-before-you-build-3hoo</guid>
      <description>&lt;p&gt;Most edtech teams pick LTI because it sounds like the obvious choice. It's a standard, it works across LMS platforms, and everyone supports it. They start building. Three months in, they hit something LTI simply cannot do — and now they're either redesigning the product or bolting on a custom API integration they didn't plan for.&lt;/p&gt;

&lt;p&gt;The decision between LTI and a direct API integration isn't about which one is better. It's about what your product actually needs to do. Get this wrong at the start and you'll pay for it later.&lt;/p&gt;




&lt;h2&gt;
  
  
  What LTI is good at
&lt;/h2&gt;

&lt;p&gt;LTI handles the launch. A user clicks a link inside their LMS, the LMS packages up their identity and course context, and your tool receives it. The user lands in your product already authenticated, already in the right context, without a separate login.&lt;/p&gt;

&lt;p&gt;On top of that, LTI Advantage adds three services that cover most standard edtech needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grade passback to the LMS gradebook (Assignment and Grade Services)&lt;/li&gt;
&lt;li&gt;Pulling the roster of who's in a course (Names and Role Provisioning)&lt;/li&gt;
&lt;li&gt;Letting instructors select specific content from your tool and place it in their course (Deep Linking)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your product needs to launch from inside an LMS, authenticate users, and send grades back — LTI handles all of that cleanly, and it works across Canvas, Moodle, Blackboard, and Brightspace without rebuilding the integration for each one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where LTI hits a wall
&lt;/h2&gt;

&lt;p&gt;LTI was designed for launching tools and passing grades. It was not designed for complex workflows, file handling, or deep data access.&lt;/p&gt;

&lt;p&gt;Here's where teams get caught:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File submissions and complex passback&lt;/strong&gt; — LTI's grade passback supports scores. It does not support file submissions, multi-part responses, or rich content. If your core workflow involves students submitting files, peer reviews, or anything beyond a numerical score, LTI cannot carry that data back to the LMS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-course data access&lt;/strong&gt; — an LTI launch gives your tool visibility into the course it was launched from. It cannot see other courses the same teacher runs, historical data across terms, or institution-wide data. If your product needs any of that, LTI won't give it to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roster access before launch&lt;/strong&gt; — with basic LTI, you only know a user exists once they've clicked the link. If you need to pre-populate your system with a full class roster before anyone launches, you need Names and Role Provisioning Services (part of LTI Advantage) — or a direct API integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Platforms that don't support LTI&lt;/strong&gt; — Google Classroom and Microsoft Teams, two of the most widely used learning platforms, do not support the LTI standard. If your target customers are K12 schools on Google Classroom or corporate teams on Microsoft Teams, LTI is not an option. You need their proprietary APIs.&lt;/p&gt;




&lt;h2&gt;
  
  
  When a direct API integration is the right call
&lt;/h2&gt;

&lt;p&gt;A direct API integration — connecting to Canvas's API, Moodle's REST API, or Microsoft Graph — gives you far more control. You can read and write data across courses, manage enrollments programmatically, create assignments, and access historical records. The tradeoff: you build and maintain a separate integration for each LMS you support.&lt;/p&gt;

&lt;p&gt;Use API when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your product needs data beyond what a single course launch provides&lt;/li&gt;
&lt;li&gt;You're targeting Google Classroom or Microsoft Teams&lt;/li&gt;
&lt;li&gt;Your workflow involves file handling, complex submissions, or rich content&lt;/li&gt;
&lt;li&gt;You need to provision users or content before anyone launches your tool&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The decision in practice
&lt;/h2&gt;

&lt;p&gt;I've seen teams design their entire product around LTI as the core data layer — only to discover mid-build that their key workflow requires something LTI doesn't support. File submissions, cross-course data, pre-launch provisioning — these aren't edge cases. They're common product requirements that fall outside what LTI was designed to do.&lt;/p&gt;

&lt;p&gt;Before you commit to either path, map out your full data flow. Not just the launch. What data does your product need, when does it need it, and where does it need to go back? Answer those three questions and the right integration method becomes obvious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If your product needs to:&lt;/strong&gt; launch from an LMS, authenticate users, send grades back, support deep linking — build LTI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If your product needs to:&lt;/strong&gt; handle files, access cross-course data, pre-provision users, or support Google Classroom or Microsoft Teams — build a direct API integration, or combine both.&lt;/p&gt;

&lt;p&gt;Many mature edtech products end up with both. LTI for the launch and grade passback, API for everything else. That's not overengineering — it's using each tool for what it was actually designed to do.&lt;/p&gt;




</description>
      <category>edtech</category>
      <category>lti</category>
      <category>tutorial</category>
      <category>lms</category>
    </item>
  </channel>
</rss>
