This endpoint enables you to process learning traces by transforming them into standardized formats and protecting sensitive personal data.

Send your learning traces to this endpoint to:

  • Convert them into standard formats for better interoperability

  • Automatically protect sensitive personal data

  • Prepare them for analytics and sharing

Making a Request

POST /process
Content-Type: application/json

Body parameters

Parameter

Type

Required

Description

data

object

Yes

Your trace data

Query Parameters

This endpoint does not require any query parameter.

Response

Response parameters

Parameter

Type

Description

output_trace

object

The processed trace, standardized and anonymized

recommendations

object

List of suggestions to improve trace quality

meta

object

Processing metadata including formats and detected DASES profile

recommendations Object Details

Parameter

Type

Description

rule

string

Type of check performed (e.g., "presence", "absence")

path

string

JSON path to the concerned field

expected

string

What should be ("included", "excluded", list of values)

actual

string

Current state found ("missing", "present", list of values)

meta Object Details

Field

Type

Description

input_format

string

Detected format of the original trace

output_format

string

Format after processing (currently always "xapi")

profile

string

Detected DASES profile (e.g., "lms.accessed-page", "assessment.completed") indicating the type of learning activity

How-to Guide

Getting Started

  • Send your learning traces in their native format

  • Let the API handle format detection and standardization

  • Use recommendations to improve data quality

  • Supported input formats:

    • xAPI

    • IMS Caliper 1.1/1.2

    • SCORM 2004

    • Custom formats (with mapping file)

Best Practices

  • Keep original identifiers and timestamps

  • Include activity context when available

  • Monitor recommendations for data quality improvements

Common Applications

  • Cross-platform learning analytics

  • Secure data sharing between organizations

  • Compliance reporting

  • Learning pattern analysis

Exemples

xAPI exemple

Request

curl --request POST \

--url http://trace-processor.localhost/process \
  --header 'Content-Type: application/json' \
  --data '{
  "data": {
    "timestamp": "2024-03-11T14:17:32.814Z",
    "id": "d4618c23-d612-4709-8d9a-478d87808067",
    "actor": {
      "account": {
        "homePage": "https://example.edu/",
        "name": "554433"
      },
      "objectType": "Agent"
    },
    "verb": {
      "id": "https://activitystrea.ms/schema/1.0/access",
      "display": {
        "en-US": "Accessed"
      }
    },
    "object": {
      "id": "https://example.com/activity/unique_id",
      "objectType": "Activity",
      "definition": {
        "name": {
          "en-US": "1EdTech Caliper Implementation Guide, pg 5"
        },
        "description": {
          "en-US": "No description provided"
        },
        "type": "https://w3id.org/xapi/acrossx/activities/webpage",
        "extensions": {
          "https://w3id.org/xapi/acrossx/extensions/type": "course"
        }
      }
    },
    "context": {
      "contextActivities": {
        "category": {
          "id": "https://toto.org
        "category": {
          "id": "https://toto.org",
          "definition": {
            "type": "http://tata.org"
          }
        }
      }
    }
  }
}'


Response



{
  "outputtrace": {
    "timestamp": "2024-03-11T14:17:32.814Z",
    "id": "d4618c23-d612-4709-8d9a-478d87808067",
    "actor": {
      "account": {
        "homePage": "https://anonymous.org",
        "name": "Anonymous"
      },
      "objectType": "Agent"
    },
    "verb": {
      "id": "https://w3id.org/xapi/netc/verbs/accessed",
      "display": {
        "en-US": "Accessed a page"
      }
    },
    "object": {
      "id": "https://example.com/activity/uniqueid",
      "objectType": "Activity",
      "definition": {
        "name": {
          "en-US": "1EdTech Caliper Implementation Guide, pg 5"
        },
        "description": {
          "en-US": "No description provided"
        },
        "type": "https://w3id.org/xapi/acrossx/activities/webpage",
        "extensions": {
          "https://w3id.org/xapi/acrossx/extensions/type": "course"
        }
      }
    },
    "context": {
      "contextActivities": {
        "category": [
          {
            "id": "https://toto.org",
            "definition": {
              "type": "http://tata.org"
            }
          },
          {
            "id": "https://w3id.org/xapi/lms",
            "definition": {
              "type": "http://adlnet.gov/expapi/activities/profile"
            }
          }
        ]
      }
    },
    "version": "1.0.0"
  },
  "recommendations": [
    {
      "rule": "presence",
      "path": "$.context.extensions['https://w3id.org/xapi/cmi5/context/extensions/sessionid']",
      "expected": "included",
      "actual": "missing"
    }
  ],
  "meta": {
    "inputformat": "xapi",
    "outputformat": "xapi",
    "profile": "lms.accessed-page"
  }
}


What happened?

In this example, the API:

  • Detected the input format as xAPI

  • Anonymized the actor's information

  • Added the DASES LMS profile to indicate the type of learning activity

  • Standardized the data according to the DASES profile

  • Generated recommendations for improving trace quality

IMS Caliper exemple

Request



curl --request POST \
  --url /process \
  --header 'Content-Type: application/json' \
  --data '{
  "data": {
    "sensor": "http://oxana.instructure.com/",
    "sendTime": "2019-11-16T02:08:51.787Z",
    "dataVersion": "http://purl.imsglobal.org/ctx/caliper/v1p2",
    "data": [
      {
        "@context": "http://purl.imsglobal.org/ctx/caliper/v1p2",
        "id": "urn:uuid:e5891791-3d27-4df1-a272-091a6b9f9076",
        "type": "ResourceManagementEvent",
        "actor": {
          "id": "https://example.edu/users/554433",
          "type": "Person"
        },
        "action": "Downloaded",
        "object": {
          "id": "https://example.edu/files/experimentdata20240712.csv",
          "type": "DigitalResource",
          "name": "Quantum Experiment Raw Data",
          "dateCreated": "2024-07-12T09:30:00.000Z",
          "dateModified": "2024-07-12T09:30:00.000Z",
          "mediaType": "text/csv",
          "fileFormat": "text/csv",
          "creator": {
            "id": "https://example.edu/devices/quantumcomputer01",
            "type": "Device",
            "name": "Quantum Computer Lab 01"
          },
          "isPartOf": {
            "id": "https://example.edu/courses/PHY301/experiment_data",
            "type": "DigitalResourceCollection",
            "name": "PHY301 Experiment Data Files"
          }
        },
        "eventTime": "2024-07-12T17:45:00.000Z",
        "edApp": {
          "id": "https://example.edu/apps/dataRepository",
          "type": "SoftwareApplication",
          "version": "3.2"
        },
        "group": {
          "id": "https://example.edu/terms/202401/courses/PHY301",
          "type": "CourseOffering",
          "courseNumber": "PHY301",
          "name": "Advanced Quantum Mechanics"
        },
        "membership": {
          "id": "https://example.edu/terms/202401/courses/PHY301/members/554433",
          "type": "Membership",
          "member": "https://example.edu/users/554433",
          "organization": "https://example.edu/terms/202401/courses/PHY301",
          "roles": [
            "Learner"
          ],
          "status": "Active"
        },
        "session": {
          "id": "https://example.edu/sessions/9ceb1b8a-5bd4-4ef0-9365-4f21bf6bf29a",
          "type": "Session"
        },
        "extensions": {
          "downloadDetails": {
            "fileSize": "15678901",
            "downloadSpeed": "4.2 MB/s",
            "downloadLocation": "C:/Users/student/Documents/ExperimentData/",
            "dataPoints": 100000
          }
        }
      }
    ]
  }
}'


Response



{
  "outputtrace": {
    "id": "e5891791-3d27-4df1-a272-091a6b9f9076",
    "actor": {
      "account": {
        "homePage": "https://anonymous.org",
        "name": "Anonymous"
      },
      "objectType": "Agent"
    },
    "verb": {
      "id": "http://id.tincanapi.com/verb/downloaded",
      "display": {
        "en-US": "Downloaded a file"
      }
    },
    "object": {
      "id": "https://example.edu/files/experimentdata20240712.csv",
      "objectType": "Activity",
      "definition": {
        "name": {
          "en-US": "Quantum Experiment Raw Data"
        },
        "description": {
          "en-US": "No description provided"
        },
        "extensions": {
          "http://oxana.instructure.com/imscaliper/object": {
            "type": "DigitalResource",
            "dateCreated": "2024-07-12T09:30:00.000Z",
            "dateModified": "2024-07-12T09:30:00.000Z",
            "mediaType": "text/csv",
            "fileFormat": "text/csv",
            "creator": {
              "id": "https://example.edu/devices/quantumcomputer01",
              "type": "Device",
              "name": "Quantum Computer Lab 01"
            },
            "isPartOf": {
              "id": "https://example.edu/courses/PHY301/experimentdata",
              "type": "DigitalResourceCollection",
              "name": "PHY301 Experiment Data Files"
            }
          }
        },
        "type": "http://activitystrea.ms/file"
      }
    },
    "context": {
      "contextActivities": {
        "grouping": {
          "id": "https://example.edu/terms/202401/courses/PHY301",
          "objectType": "Activity"
        },
        "category": [
          {
            "id": "https://w3id.org/xapi/lms",
            "definition": {
              "type": "http://adlnet.gov/expapi/activities/profile"
            }
          }
        ]
      },
      "platform": "https://example.edu/apps/dataRepository",
      "extensions": {
        "http://oxana.instructure.com/imscaliper/type": "ResourceManagementEvent",
        "http://oxana.instructure.com/imscaliper/actor": {
          "type": "Person"
        },
        "http://oxana.instructure.com/imscaliper/group": {
          "type": "CourseOffering",
          "courseNumber": "PHY301",
          "name": "Advanced Quantum
Mechanics"
        },
        "http://oxana.instructure.com/imscaliper/session": {
          "id": "https://example.edu/sessions/9ceb1b8a-5bd4-4ef0-9365-4f21bf6bf29a",
          "type": "Session"
        },
        "http://oxana.instructure.com/imscaliper/edApp": {
          "type": "SoftwareApplication",
          "version": "3.2"
        },
        "http://oxana.instructure.com/imscaliper/membership": {
          "id": "https://example.edu/terms/202401/courses/PHY301/members/554433",
          "type": "Membership",
          "member": "https://example.edu/users/554433",
          "organization": "https://example.edu/terms/202401/courses/PHY301",
          "roles": [
            "Learner"
          ],
          "status": "Active"
        }
      }
    },
    "timestamp": "2024-07-12T17:45:00.000Z",
    "version": "1.0.0"
  },
  "recommendations": [
    {
      "rule": "presence",
      "path": "$.object.definition.extensions['https://w3id.org/xapi/acrossx/extensions/type']",
      "expected": "included",
      "actual": "missing"
    }
  ],
  "meta": {
    "inputformat": "imscaliper12",
    "output_format": "xapi",
    "profile": "lms.downloaded-file"
  }
}


What happened?

In this example, the API:

  • Converted IMS Caliper format to xAPI format

  • Mapped key fields ("action", "actor", "object", etc.) and anonymized them

  • Preserved context information like course and session data

  • Identified the activity as a file download in an LMS context

  • Generated recommendations for improving trace quality

Status codes

Status Code

Description

Possible Causes

200

Success

Request processed successfully

400

Bad Request

Invalid input format, malformed JSON

422

Validation Error

Input data validation failed

500

Internal Server Error

Processing error, service unavailable


/process

This endpoint enables you to process learning traces by transforming them into standardized formats and protecting sensitive personal data.

Send your learning traces to this endpoint to:

  • Convert them into standard formats for better interoperability

  • Automatically protect sensitive personal data

  • Prepare them for analytics and sharing

Making a Request

POST /process
Content-Type: application/json

Body parameters

Parameter

Type

Required

Description

data

object

Yes

Your trace data

Query Parameters

This endpoint does not require any query parameter.

Response

Response parameters

Parameter

Type

Description

output_trace

object

The processed trace, standardized and anonymized

recommendations

object

List of suggestions to improve trace quality

meta

object

Processing metadata including formats and detected DASES profile

recommendations Object Details

Parameter

Type

Description

rule

string

Type of check performed (e.g., "presence", "absence")

path

string

JSON path to the concerned field

expected

string

What should be ("included", "excluded", list of values)

actual

string

Current state found ("missing", "present", list of values)

meta Object Details

Field

Type

Description

input_format

string

Detected format of the original trace

output_format

string

Format after processing (currently always "xapi")

profile

string

Detected DASES profile (e.g., "lms.accessed-page", "assessment.completed") indicating the type of learning activity

How-to Guide

Getting Started

  • Send your learning traces in their native format

  • Let the API handle format detection and standardization

  • Use recommendations to improve data quality

  • Supported input formats:

    • xAPI

    • IMS Caliper 1.1/1.2

    • SCORM 2004

    • Custom formats (with mapping file)

Best Practices

  • Keep original identifiers and timestamps

  • Include activity context when available

  • Monitor recommendations for data quality improvements

Common Applications

  • Cross-platform learning analytics

  • Secure data sharing between organizations

  • Compliance reporting

  • Learning pattern analysis

Exemples

xAPI exemple

Request

curl --request POST \

--url http://trace-processor.localhost/process \
  --header 'Content-Type: application/json' \
  --data '{
  "data": {
    "timestamp": "2024-03-11T14:17:32.814Z",
    "id": "d4618c23-d612-4709-8d9a-478d87808067",
    "actor": {
      "account": {
        "homePage": "https://example.edu/",
        "name": "554433"
      },
      "objectType": "Agent"
    },
    "verb": {
      "id": "https://activitystrea.ms/schema/1.0/access",
      "display": {
        "en-US": "Accessed"
      }
    },
    "object": {
      "id": "https://example.com/activity/unique_id",
      "objectType": "Activity",
      "definition": {
        "name": {
          "en-US": "1EdTech Caliper Implementation Guide, pg 5"
        },
        "description": {
          "en-US": "No description provided"
        },
        "type": "https://w3id.org/xapi/acrossx/activities/webpage",
        "extensions": {
          "https://w3id.org/xapi/acrossx/extensions/type": "course"
        }
      }
    },
    "context": {
      "contextActivities": {
        "category": {
          "id": "https://toto.org
        "category": {
          "id": "https://toto.org",
          "definition": {
            "type": "http://tata.org"
          }
        }
      }
    }
  }
}'


Response



{
  "outputtrace": {
    "timestamp": "2024-03-11T14:17:32.814Z",
    "id": "d4618c23-d612-4709-8d9a-478d87808067",
    "actor": {
      "account": {
        "homePage": "https://anonymous.org",
        "name": "Anonymous"
      },
      "objectType": "Agent"
    },
    "verb": {
      "id": "https://w3id.org/xapi/netc/verbs/accessed",
      "display": {
        "en-US": "Accessed a page"
      }
    },
    "object": {
      "id": "https://example.com/activity/uniqueid",
      "objectType": "Activity",
      "definition": {
        "name": {
          "en-US": "1EdTech Caliper Implementation Guide, pg 5"
        },
        "description": {
          "en-US": "No description provided"
        },
        "type": "https://w3id.org/xapi/acrossx/activities/webpage",
        "extensions": {
          "https://w3id.org/xapi/acrossx/extensions/type": "course"
        }
      }
    },
    "context": {
      "contextActivities": {
        "category": [
          {
            "id": "https://toto.org",
            "definition": {
              "type": "http://tata.org"
            }
          },
          {
            "id": "https://w3id.org/xapi/lms",
            "definition": {
              "type": "http://adlnet.gov/expapi/activities/profile"
            }
          }
        ]
      }
    },
    "version": "1.0.0"
  },
  "recommendations": [
    {
      "rule": "presence",
      "path": "$.context.extensions['https://w3id.org/xapi/cmi5/context/extensions/sessionid']",
      "expected": "included",
      "actual": "missing"
    }
  ],
  "meta": {
    "inputformat": "xapi",
    "outputformat": "xapi",
    "profile": "lms.accessed-page"
  }
}


What happened?

In this example, the API:

  • Detected the input format as xAPI

  • Anonymized the actor's information

  • Added the DASES LMS profile to indicate the type of learning activity

  • Standardized the data according to the DASES profile

  • Generated recommendations for improving trace quality

IMS Caliper exemple

Request



curl --request POST \
  --url /process \
  --header 'Content-Type: application/json' \
  --data '{
  "data": {
    "sensor": "http://oxana.instructure.com/",
    "sendTime": "2019-11-16T02:08:51.787Z",
    "dataVersion": "http://purl.imsglobal.org/ctx/caliper/v1p2",
    "data": [
      {
        "@context": "http://purl.imsglobal.org/ctx/caliper/v1p2",
        "id": "urn:uuid:e5891791-3d27-4df1-a272-091a6b9f9076",
        "type": "ResourceManagementEvent",
        "actor": {
          "id": "https://example.edu/users/554433",
          "type": "Person"
        },
        "action": "Downloaded",
        "object": {
          "id": "https://example.edu/files/experimentdata20240712.csv",
          "type": "DigitalResource",
          "name": "Quantum Experiment Raw Data",
          "dateCreated": "2024-07-12T09:30:00.000Z",
          "dateModified": "2024-07-12T09:30:00.000Z",
          "mediaType": "text/csv",
          "fileFormat": "text/csv",
          "creator": {
            "id": "https://example.edu/devices/quantumcomputer01",
            "type": "Device",
            "name": "Quantum Computer Lab 01"
          },
          "isPartOf": {
            "id": "https://example.edu/courses/PHY301/experiment_data",
            "type": "DigitalResourceCollection",
            "name": "PHY301 Experiment Data Files"
          }
        },
        "eventTime": "2024-07-12T17:45:00.000Z",
        "edApp": {
          "id": "https://example.edu/apps/dataRepository",
          "type": "SoftwareApplication",
          "version": "3.2"
        },
        "group": {
          "id": "https://example.edu/terms/202401/courses/PHY301",
          "type": "CourseOffering",
          "courseNumber": "PHY301",
          "name": "Advanced Quantum Mechanics"
        },
        "membership": {
          "id": "https://example.edu/terms/202401/courses/PHY301/members/554433",
          "type": "Membership",
          "member": "https://example.edu/users/554433",
          "organization": "https://example.edu/terms/202401/courses/PHY301",
          "roles": [
            "Learner"
          ],
          "status": "Active"
        },
        "session": {
          "id": "https://example.edu/sessions/9ceb1b8a-5bd4-4ef0-9365-4f21bf6bf29a",
          "type": "Session"
        },
        "extensions": {
          "downloadDetails": {
            "fileSize": "15678901",
            "downloadSpeed": "4.2 MB/s",
            "downloadLocation": "C:/Users/student/Documents/ExperimentData/",
            "dataPoints": 100000
          }
        }
      }
    ]
  }
}'


Response



{
  "outputtrace": {
    "id": "e5891791-3d27-4df1-a272-091a6b9f9076",
    "actor": {
      "account": {
        "homePage": "https://anonymous.org",
        "name": "Anonymous"
      },
      "objectType": "Agent"
    },
    "verb": {
      "id": "http://id.tincanapi.com/verb/downloaded",
      "display": {
        "en-US": "Downloaded a file"
      }
    },
    "object": {
      "id": "https://example.edu/files/experimentdata20240712.csv",
      "objectType": "Activity",
      "definition": {
        "name": {
          "en-US": "Quantum Experiment Raw Data"
        },
        "description": {
          "en-US": "No description provided"
        },
        "extensions": {
          "http://oxana.instructure.com/imscaliper/object": {
            "type": "DigitalResource",
            "dateCreated": "2024-07-12T09:30:00.000Z",
            "dateModified": "2024-07-12T09:30:00.000Z",
            "mediaType": "text/csv",
            "fileFormat": "text/csv",
            "creator": {
              "id": "https://example.edu/devices/quantumcomputer01",
              "type": "Device",
              "name": "Quantum Computer Lab 01"
            },
            "isPartOf": {
              "id": "https://example.edu/courses/PHY301/experimentdata",
              "type": "DigitalResourceCollection",
              "name": "PHY301 Experiment Data Files"
            }
          }
        },
        "type": "http://activitystrea.ms/file"
      }
    },
    "context": {
      "contextActivities": {
        "grouping": {
          "id": "https://example.edu/terms/202401/courses/PHY301",
          "objectType": "Activity"
        },
        "category": [
          {
            "id": "https://w3id.org/xapi/lms",
            "definition": {
              "type": "http://adlnet.gov/expapi/activities/profile"
            }
          }
        ]
      },
      "platform": "https://example.edu/apps/dataRepository",
      "extensions": {
        "http://oxana.instructure.com/imscaliper/type": "ResourceManagementEvent",
        "http://oxana.instructure.com/imscaliper/actor": {
          "type": "Person"
        },
        "http://oxana.instructure.com/imscaliper/group": {
          "type": "CourseOffering",
          "courseNumber": "PHY301",
          "name": "Advanced Quantum
Mechanics"
        },
        "http://oxana.instructure.com/imscaliper/session": {
          "id": "https://example.edu/sessions/9ceb1b8a-5bd4-4ef0-9365-4f21bf6bf29a",
          "type": "Session"
        },
        "http://oxana.instructure.com/imscaliper/edApp": {
          "type": "SoftwareApplication",
          "version": "3.2"
        },
        "http://oxana.instructure.com/imscaliper/membership": {
          "id": "https://example.edu/terms/202401/courses/PHY301/members/554433",
          "type": "Membership",
          "member": "https://example.edu/users/554433",
          "organization": "https://example.edu/terms/202401/courses/PHY301",
          "roles": [
            "Learner"
          ],
          "status": "Active"
        }
      }
    },
    "timestamp": "2024-07-12T17:45:00.000Z",
    "version": "1.0.0"
  },
  "recommendations": [
    {
      "rule": "presence",
      "path": "$.object.definition.extensions['https://w3id.org/xapi/acrossx/extensions/type']",
      "expected": "included",
      "actual": "missing"
    }
  ],
  "meta": {
    "inputformat": "imscaliper12",
    "output_format": "xapi",
    "profile": "lms.downloaded-file"
  }
}


What happened?

In this example, the API:

  • Converted IMS Caliper format to xAPI format

  • Mapped key fields ("action", "actor", "object", etc.) and anonymized them

  • Preserved context information like course and session data

  • Identified the activity as a file download in an LMS context

  • Generated recommendations for improving trace quality

Status codes

Status Code

Description

Possible Causes

200

Success

Request processed successfully

400

Bad Request

Invalid input format, malformed JSON

422

Validation Error

Input data validation failed

500

Internal Server Error

Processing error, service unavailable


last updated 3 weeks ago