Skip to main content
https://.thoughtindustries.com

Record Course External Activity

Records an external activity completion against a course (LTI-style), optionally granting awards and an external certificate. Requires the `externalActivity` feature to be enabled

Record an external activity completion against a course (LTI-style), optionally granting awards and an external certificate.

POSThttps://example.thoughtindustries.com/incoming/v2/courseExternalActivity

:::note Feature flag: Requires the externalActivity feature to be enabled on the company. :::

Example request

curl -X POST "https://example.thoughtindustries.com/incoming/v2/courseExternalActivity" \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "courseId": "123e4567-e89b-12d3-a456-426614174000",
    "userEmail": "[email protected]",
    "completionDate": "2026-01-15T00:00:00.000Z"
  }'

You may alternatively pass the attributes in a signed jwt query param instead of a JSON body:

curl -X POST "https://example.thoughtindustries.com/incoming/v2/courseExternalActivity?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H 'Authorization: Bearer YOUR_API_KEY'

Parameters

NameTypeRequiredLocationDescription
courseIduuidNobodyCourse UUID. courseId or courseSku is required.
courseSkustringNobodyCourse SKU. courseId or courseSku is required.
userIdstringNobodyLearner ID. userId or userEmail is required.
userEmailstringNobodyLearner email. userId or userEmail is required.
completionDateISO 8601 timestampNobodyDate and time the external activity was completed.
awardsarrayNobodyAward-claiming entries to grant the learner upon completion.
certificateUrlstringNobodyExternal certificate URL (only applied when transcriptFields are also supplied and external certificate uploads are enabled).
transcriptFieldsarrayNobodyTranscript fields for the external certificate.

Example response

On success the endpoint returns 200 with an empty body:

HTTP/1.1 200 OK

Validation errors

Validation failures return 400:

{
  "errors": ["userId or userEmail is required"]
}

Other validation messages include:

  • "courseSku or courseId is required"
  • "invalid completionDate. please use ISO 8601 format"
  • "Invalid course or user"

Response fields

FieldTypeDescription
(empty)200On success, returns 200 with an empty body.
errorsstring[]Validation error messages on 400.