<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://leastsoftware.com/docs/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://leastsoftware.com/docs/feed.php">
        <title>&lt;a href=&quot;https://leastsoftware.com/docs/&quot;&gt; LEAST Software Wiki&lt;/a&gt; - developer</title>
        <description></description>
        <link>https://leastsoftware.com/docs/</link>
        <image rdf:resource="https://leastsoftware.com/docs/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-06-03T09:23:27+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:api&amp;rev=1780379195&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:authentication&amp;rev=1779083841&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:collections&amp;rev=1779081583&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:content-injection&amp;rev=1779633850&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:cookbook-automation&amp;rev=1779086314&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:cookbook-basics&amp;rev=1779086313&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:cookbook-bulk&amp;rev=1779086314&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:cookbook-webhooks&amp;rev=1779555845&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:cookbook&amp;rev=1779086313&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:endpoints&amp;rev=1779633850&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:lms-rules&amp;rev=1779554375&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:lti&amp;rev=1779081583&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:postman&amp;rev=1779083861&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:sso&amp;rev=1779633850&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:start&amp;rev=1779633847&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:webhooks&amp;rev=1779554375&amp;do=diff"/>
                <rdf:li rdf:resource="https://leastsoftware.com/docs/doku.php?id=developer:xapi&amp;rev=1779083918&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://leastsoftware.com/docs/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title><a href="https://leastsoftware.com/docs/"> LEAST Software Wiki</a></title>
        <link>https://leastsoftware.com/docs/</link>
        <url>https://leastsoftware.com/docs/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:api&amp;rev=1780379195&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-06-02T05:46:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>api</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:api&amp;rev=1780379195&amp;do=diff</link>
        <description>Collection API Reference

All requests go to &lt;https://yourdomain.com/api/apic.php&gt; via POST only (GET always returns error -5).
See Authentication for required auth parameters.

Every call requires: u (user ID), k (API key), r (collection ref), g (GX group), f (function).

Response Envelope


{
  &quot;error&quot;:    &quot;0&quot;,
  &quot;fn&quot;:       &quot;readone&quot;,
  &quot;version&quot;:  &quot;1.0&quot;,
  &quot;datetime&quot;: &quot;2026-05-18 10:00:00&quot;,
  &quot;fields&quot;:   &quot;5&quot;,
  &quot;data&quot;: { &quot;fnerr&quot;: 0 }
}</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:authentication&amp;rev=1779083841&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T05:57:21+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>authentication</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:authentication&amp;rev=1779083841&amp;do=diff</link>
        <description>API Authentication

Overview

Every Collection API request requires credentials. There are two credential sets — choose the right one for your context.

Standard API Credentials

Used by external integrations and automated scripts.
 Parameter  Field on Login record</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:collections&amp;rev=1779081583&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T05:19:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>collections</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:collections&amp;rev=1779081583&amp;do=diff</link>
        <description>Building Collections

Overview

A Collection is a configurable data layer — part database table, part workflow engine. This guide walks through designing and deploying a custom collection.

Design Process

	*  Define the data model — what fields does each record need?</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:content-injection&amp;rev=1779633850&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-24T14:44:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>content-injection</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:content-injection&amp;rev=1779633850&amp;do=diff</link>
        <description>Content Injection Pipeline

Overview

The Content Injection Pipeline allows external scripts and services to programmatically create lessons and materials on the LEAST platform. It is the primary integration point for automated content onboarding.

Endpoint</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:cookbook-automation&amp;rev=1779086314&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T06:38:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cookbook-automation</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:cookbook-automation&amp;rev=1779086314&amp;do=diff</link>
        <description>API Cookbook — Automation Examples

Poll for New Records (Python)

Check for new records every 5 minutes and process them:


import time, requests, json

API_URL = &#039;https://wherewelearn.com/api/apic.php&#039;
AUTH    = {&#039;u&#039;:&#039;APIUSER&#039;,&#039;k&#039;:&#039;APIKEY&#039;,&#039;r&#039;:&#039;COLLREF&#039;,&#039;g&#039;:&#039;8&#039;}
STATE_FILE = &#039;last_processed_id.txt&#039;

def get_last_id():
    try: return int(open(STATE_FILE).read().strip())
    except: return 0

def save_last_id(n):
    open(STATE_FILE,&#039;w&#039;).write(str(n))

def process(record):
    print(f&quot;Processin…</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:cookbook-basics&amp;rev=1779086313&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T06:38:33+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cookbook-basics</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:cookbook-basics&amp;rev=1779086313&amp;do=diff</link>
        <description>API Cookbook — Basic Recipes

Prerequisites

	*  API username and key (set by a Level 3 admin — see User Management)
	*  Collection reference (r param) — visible in the URL when viewing the collection
	*  View ID (g param) — get it from f=meta

Recipe 1 — Discover a Collection</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:cookbook-bulk&amp;rev=1779086314&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T06:38:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cookbook-bulk</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:cookbook-bulk&amp;rev=1779086314&amp;do=diff</link>
        <description>API Cookbook — Bulk Operations

Bulk Create (up to 500 records)

Use bulkcreate instead of looping create — it&#039;s dramatically faster.


curl -s -k -X POST &quot;https://wherewelearn.com/api/apic.php&quot; \
  -d &quot;u=myuser&amp;k=mykey&amp;r=COLLREF&amp;g=WRITEVIEWID&amp;f=bulkcreate&quot; \
  --data-urlencode &#039;records=[
    {&quot;strD5_1_1&quot;:&quot;First item&quot;,&quot;strD5_1_6&quot;:&quot;Development&quot;},
    {&quot;strD5_1_1&quot;:&quot;Second item&quot;,&quot;strD5_1_6&quot;:&quot;Bug&quot;},
    {&quot;strD5_1_1&quot;:&quot;Third item&quot;,&quot;strD5_1_6&quot;:&quot;Governance&quot;}
  ]&#039;</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:cookbook-webhooks&amp;rev=1779555845&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-23T17:04:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cookbook-webhooks</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:cookbook-webhooks&amp;rev=1779555845&amp;do=diff</link>
        <description>API Cookbook — Webhook Patterns

	&quot; Note on signature headers: LEAST uses two webhook systems with different headers. Collection API webhooks use X-LEAST-Signature. Workflow Webhooks and LMS Rule Engine webhooks use X-WF-Signature. The patterns below apply to both — substitute the correct header name.</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:cookbook&amp;rev=1779086313&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T06:38:33+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cookbook</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:cookbook&amp;rev=1779086313&amp;do=diff</link>
        <description>API Cookbook

Practical recipes for common Collection API tasks. For full parameter reference, see Collection API Reference.

All examples use the endpoint: &lt;https://wherewelearn.com/api/apic.php&gt;

Contents

	*  Basic Recipes — first call, list records, read one, create, update
	*  Bulk Operations — bulk create from CSV, batch updates</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:endpoints&amp;rev=1779633850&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-24T14:44:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>endpoints</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:endpoints&amp;rev=1779633850&amp;do=diff</link>
        <description>API Endpoints Reference

Collection API

All collection read/write operations go through one endpoint:
 Endpoint  Method  Auth  /api/apic.php  GET or POST  API username + key (u, k params) 
See Collection API Reference for the full function list and Authentication for credential setup.

Content Injection Pipeline</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:lms-rules&amp;rev=1779554375&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-23T16:39:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>lms-rules</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:lms-rules&amp;rev=1779554375&amp;do=diff</link>
        <description>LMS Automation Rules

Overview

LMS Automation Rules let administrators configure event-driven automations without writing code. Each rule defines:

	*  A Trigger — the learner event that fires the rule
	*  A Condition (optional) — a filter on event context (e.g. score &gt;= 80)</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:lti&amp;rev=1779081583&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T05:19:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>lti</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:lti&amp;rev=1779081583&amp;do=diff</link>
        <description>LTI 1.3 Integration

Overview

LEAST acts as an LTI 1.3 Tool Provider (TP). Your VLE is the Platform. This guide covers the technical flow and endpoint reference for integrating a new platform.

OIDC Launch Flow

LTI 1.3 uses an OpenID Connect third-party login flow:</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:postman&amp;rev=1779083861&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T05:57:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>postman</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:postman&amp;rev=1779083861&amp;do=diff</link>
        <description>Postman Collection

A ready-to-import Postman collection covering every function of the LEAST Collection API.
Download the file, import it into Postman, fill in four collection variables, and you are making live API calls in under a minute.

Download</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:sso&amp;rev=1779633850&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-24T14:44:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>sso</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:sso&amp;rev=1779633850&amp;do=diff</link>
        <description>SSO / SAML 2.0 Integration

Overview

LEAST acts as a SAML 2.0 Service Provider (SP). Your Identity Provider (IdP) authenticates users and sends a signed assertion to LEAST. LEAST provisions or matches the user account and starts a session.

For admin-facing configuration (entering IdP settings in the UI), see</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:start&amp;rev=1779633847&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-24T14:44:07+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>start</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:start&amp;rev=1779633847&amp;do=diff</link>
        <description>Developer &amp; Integration Guide

This guide covers the LEAST platform integration surface for developers and system integrators.

API &amp; Data

	*  API Authentication — credentials, tokens, and auth flow
	*  Collection API Reference — full API function reference
	*  Building Collections — designing custom data structures</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:webhooks&amp;rev=1779554375&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-23T16:39:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>webhooks</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:webhooks&amp;rev=1779554375&amp;do=diff</link>
        <description>Webhooks

LEAST provides two independent webhook systems. Choose the one that matches your integration scenario:
 System  What fires it  Signature header  Use for  Collection API Webhooks  Record created / updated / actioned / archived in a collection</description>
    </item>
    <item rdf:about="https://leastsoftware.com/docs/doku.php?id=developer:xapi&amp;rev=1779083918&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-05-18T05:58:38+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>xapi</title>
        <link>https://leastsoftware.com/docs/doku.php?id=developer:xapi&amp;rev=1779083918&amp;do=diff</link>
        <description>xAPI &amp; SCORM

Overview

LEAST supports three e-learning tracking standards:

	*  SCORM 1.2 / 2004 — completion and score tracking via the SCORM API (postMessage bridge)
	*  xAPI (Tin Can API) — statement dispatch to an external LRS
	*  cmi5 — a profile of xAPI with launch and completion rules</description>
    </item>
</rdf:RDF>
