LTI Registrations

Create, list, update, and delete LTI 1.3 platform registrations for LMS integration.

LTI Registrations API

Manage LTI 1.3 registrations that connect your LMS (Canvas, Moodle, Blackboard, etc.) to TutorFlow. Each registration represents a trust relationship between an LMS platform and TutorFlow as an LTI tool.

All endpoints in this section require a Platform API key.


POST /v1/platform/lti/registrations

Creates a new LTI registration. You will need platform details from your LMS administrator.

Request Body

FieldTypeRequiredDescription
namestringYesA descriptive name for this registration (e.g., "Canvas Production")
platformIssuerstringYesThe issuer identifier of the LMS (the iss claim in LTI JWTs)
platformAuthorizationEndpointstringYesThe LMS OAuth2 authorization URL
platformTokenEndpointstringYesThe LMS OAuth2 token URL (used for AGS grade passback)
platformJwksUrlstringYesThe LMS public JWKS endpoint for verifying signed JWTs
clientIdstringYesThe client ID assigned by the LMS when registering TutorFlow
deploymentIdstringNoThe deployment ID assigned by the LMS. Some platforms require this.

Example Request

curl -X POST https://api.tutorflow.io/v1/platform/lti/registrations \
  -H "Authorization: Bearer tf_platform_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Canvas Production",
    "platformIssuer": "https://canvas.instructure.com",
    "platformAuthorizationEndpoint": "https://canvas.instructure.com/api/lti/authorize_redirect",
    "platformTokenEndpoint": "https://canvas.instructure.com/login/oauth2/token",
    "platformJwksUrl": "https://canvas.instructure.com/api/lti/security/jwks",
    "clientId": "10000000000001",
    "deploymentId": "1"
  }'

Response

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "Canvas Production",
  "platformIssuer": "https://canvas.instructure.com",
  "platformAuthorizationEndpoint": "https://canvas.instructure.com/api/lti/authorize_redirect",
  "platformTokenEndpoint": "https://canvas.instructure.com/login/oauth2/token",
  "platformJwksUrl": "https://canvas.instructure.com/api/lti/security/jwks",
  "clientId": "10000000000001",
  "deploymentId": "1",
  "toolLoginUrl": "https://api.tutorflow.io/v1/platform/lti/login",
  "toolLaunchUrl": "https://api.tutorflow.io/v1/platform/lti/launch",
  "toolJwksUrl": "https://api.tutorflow.io/v1/platform/lti/.well-known/jwks.json",
  "status": "active",
  "createdAt": "2026-03-25T12:00:00Z",
  "updatedAt": "2026-03-25T12:00:00Z"
}

Response Fields

FieldTypeDescription
idstringRegistration ID (UUID)
namestringDescriptive name
platformIssuerstringLMS issuer identifier
platformAuthorizationEndpointstringLMS authorization URL
platformTokenEndpointstringLMS token URL
platformJwksUrlstringLMS JWKS URL
clientIdstringClient ID from the LMS
deploymentIdstringDeployment ID from the LMS
toolLoginUrlstringTutorFlow OIDC login initiation URL (configure this in your LMS)
toolLaunchUrlstringTutorFlow launch callback URL (configure this in your LMS)
toolJwksUrlstringTutorFlow public JWKS URL (configure this in your LMS)
statusstringactive or inactive
createdAtstringISO 8601 timestamp
updatedAtstringISO 8601 timestamp

GET /v1/platform/lti/registrations

Returns a paginated list of LTI registrations for the authenticated workspace.

Query Parameters

ParameterTypeDefaultDescription
pagenumber1Page number
takenumber20Items per page (max 100)
statusstring-Filter by status: active or inactive

Example Request

curl "https://api.tutorflow.io/v1/platform/lti/registrations?page=1&take=10" \
  -H "Authorization: Bearer tf_platform_..."

Response

{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "Canvas Production",
      "platformIssuer": "https://canvas.instructure.com",
      "clientId": "10000000000001",
      "deploymentId": "1",
      "status": "active",
      "createdAt": "2026-03-25T12:00:00Z",
      "updatedAt": "2026-03-25T12:00:00Z"
    }
  ],
  "meta": {
    "page": 1,
    "take": 10,
    "itemCount": 1,
    "pageCount": 1,
    "hasPreviousPage": false,
    "hasNextPage": false
  }
}

GET /v1/platform/lti/registrations/:id

Retrieves a single LTI registration by its ID.

Path Parameters

ParameterTypeDescription
idstringThe registration ID (UUID)

Example Request

curl https://api.tutorflow.io/v1/platform/lti/registrations/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer tf_platform_..."

Response

Returns the full registration object (same schema as the POST response above).

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "Canvas Production",
  "platformIssuer": "https://canvas.instructure.com",
  "platformAuthorizationEndpoint": "https://canvas.instructure.com/api/lti/authorize_redirect",
  "platformTokenEndpoint": "https://canvas.instructure.com/login/oauth2/token",
  "platformJwksUrl": "https://canvas.instructure.com/api/lti/security/jwks",
  "clientId": "10000000000001",
  "deploymentId": "1",
  "toolLoginUrl": "https://api.tutorflow.io/v1/platform/lti/login",
  "toolLaunchUrl": "https://api.tutorflow.io/v1/platform/lti/launch",
  "toolJwksUrl": "https://api.tutorflow.io/v1/platform/lti/.well-known/jwks.json",
  "status": "active",
  "createdAt": "2026-03-25T12:00:00Z",
  "updatedAt": "2026-03-25T12:00:00Z"
}

PUT /v1/platform/lti/registrations/:id

Updates an existing LTI registration. All fields are optional; only the fields you include will be updated.

Path Parameters

ParameterTypeDescription
idstringThe registration ID (UUID)

Request Body

FieldTypeRequiredDescription
namestringNoUpdated name
platformIssuerstringNoUpdated issuer URL
platformAuthorizationEndpointstringNoUpdated authorization URL
platformTokenEndpointstringNoUpdated token URL
platformJwksUrlstringNoUpdated JWKS URL
clientIdstringNoUpdated client ID
deploymentIdstringNoUpdated deployment ID
statusstringNoactive or inactive

Example Request

curl -X PUT https://api.tutorflow.io/v1/platform/lti/registrations/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer tf_platform_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Canvas Production (Updated)",
    "deploymentId": "2"
  }'

Response

Returns the full updated registration object.

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "Canvas Production (Updated)",
  "platformIssuer": "https://canvas.instructure.com",
  "platformAuthorizationEndpoint": "https://canvas.instructure.com/api/lti/authorize_redirect",
  "platformTokenEndpoint": "https://canvas.instructure.com/login/oauth2/token",
  "platformJwksUrl": "https://canvas.instructure.com/api/lti/security/jwks",
  "clientId": "10000000000001",
  "deploymentId": "2",
  "toolLoginUrl": "https://api.tutorflow.io/v1/platform/lti/login",
  "toolLaunchUrl": "https://api.tutorflow.io/v1/platform/lti/launch",
  "toolJwksUrl": "https://api.tutorflow.io/v1/platform/lti/.well-known/jwks.json",
  "status": "active",
  "createdAt": "2026-03-25T12:00:00Z",
  "updatedAt": "2026-03-25T12:05:00Z"
}

DELETE /v1/platform/lti/registrations/:id

Deletes an LTI registration. This immediately invalidates all LTI launches associated with this registration. Students will no longer be able to launch TutorFlow from the linked LMS until a new registration is created.

Path Parameters

ParameterTypeDescription
idstringThe registration ID (UUID)

Example Request

curl -X DELETE https://api.tutorflow.io/v1/platform/lti/registrations/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer tf_platform_..."

Response

{
  "success": true,
  "message": "Registration deleted successfully"
}

Error Responses

StatusCodeDescription
400platform_invalid_requestMissing or invalid fields in the request body
401platform_unauthorizedInvalid or missing API key
404platform_not_foundRegistration not found
409platform_conflictA registration with the same issuer and client ID already exists
{
  "error": {
    "code": "platform_invalid_request",
    "message": "platformIssuer is required",
    "status": 400
  }
}