Create Launch Form
Builds a self-submitting HTML form that starts a resource link launch (LtiResourceLinkRequest) into a registered tool.
This is the variant most integrations use. Render the returned form string in an iframe or a new tab and the browser posts itself into the tool, which begins the OIDC handshake with LTIAAS.
The request body is identical to Create Launch Parameters; only the response differs.
A common pattern is "data:text/html," + encodeURIComponent(form) as an iframe src. See Your first launch for a complete example.
Request Body required
NONE— no name and no emailEMAIL— email onlyNAME— full, given and family nameCOMPLETE— name and email
The tool to launch, identified by the client ID LTIAAS issued when you registered it.
Your identifier for the context the launch happens in — usually a course ID. Opaque to LTIAAS; you get it back on the validation request.
Your identifier for this particular placement of the tool inside the context — usually the database ID of the activity. Opaque to LTIAAS.
user object required
Your identifier for the user being launched.
string
Your identifier for the user being launched.
integer
Your identifier for the user being launched.
Override the tool's registered launch URL for this launch only. Useful for deep-linked content, where each placement has its own URL.
How much personal data may be sent to the tool.
customParameters object
Extra key/value pairs to send to the tool. Merged over the tool's registered customParameters, so anything you set here wins.
- 201
- 400
- 401
- 403
- 404
Launch form created
Schema
A self-submitting HTML form. Render it in an iframe or a new tab; it posts itself as soon as it loads.
{
"form": "<form id=\"ltiaas_launch\" style=\"display: none;\" action=\"https://mytool.ltiaas.com/lti/login\" method=\"POST\">\n <input type=\"hidden\" name=\"iss\" value=\"https://your.ltiaas.com\" />\n <input type=\"hidden\" name=\"client_id\" value=\"U0gIhEYg2rdIr4ABscEJ\" />\n <input type=\"hidden\" name=\"lti_deployment_id\" value=\"EgAssgssdfgsfshshq8iw\" />\n <input type=\"hidden\" name=\"target_link_uri\" value=\"https://mytool.ltiaas.com/lti/launch\" />\n <input type=\"hidden\" name=\"login_hint\" value=\"rKk4PdLgcRbqE4PdSW3iV0KhAmu2\" />\n <input type=\"hidden\" name=\"lti_message_hint\" value=\"a.long.jwt\" />\n </form>\n <script>document.getElementById(\"ltiaas_launch\").submit()</script>"
}
One or more request parameters were missing or malformed.
Schema
- Array [
- ]
details object
errors object[]
One entry per field that failed validation.
{
"status": 400,
"error": "Bad Request",
"details": {
"errors": [
{
"field": "clientId",
"message": "Missing 'clientId' parameter."
}
]
}
}
The Authorization header was missing, malformed, or carried the wrong key.
Schema
details object
Context for the failure. Always carries a message code; the other keys depend on what went wrong.
Context for the failure. Always carries a message code; the other keys depend on what went wrong.
{
"status": 403,
"error": "Forbidden",
"details": {
"message": "INACTIVE_SERVICE",
"description": "string"
}
}
{
"status": 401,
"error": "Unauthorized",
"details": {
"message": "INVALID_BEARER_AUTHORIZATION_HEADER",
"description": "Invalid API Key for account."
}
}
The account is not permitted to use this endpoint — most often because it is an LTIAAS Launch account rather than a Connect one, or because a trial quota has been reached.
Schema
details object
Context for the failure. Always carries a message code; the other keys depend on what went wrong.
Context for the failure. Always carries a message code; the other keys depend on what went wrong.
{
"status": 403,
"error": "Forbidden",
"details": {
"message": "INACTIVE_SERVICE",
"description": "string"
}
}
{
"status": 403,
"error": "Forbidden",
"details": {
"message": "INVALID_ACCOUNT_TYPE"
}
}
No tool with that ID is registered on this account.
Schema
details object
Context for the failure. Always carries a message code; the other keys depend on what went wrong.
Context for the failure. Always carries a message code; the other keys depend on what went wrong.
{
"status": 403,
"error": "Forbidden",
"details": {
"message": "INACTIVE_SERVICE",
"description": "string"
}
}
{
"status": 404,
"error": "Not Found",
"details": {
"message": "UNREGISTERED_TOOL"
}
}
