Security Journey Reporting API
Use our Reporting API to send learner data to other tools such a business intelligence and data visualization programs.
Security Journey Reporting API
Security Journey provides Program Administrators access to a RESTful API; this can be used to generate custom reports within a BI tool or pull reporting metrics into your Learning Managment System (LMS) building management reports.
Requirements
- You must be a Security Journey Admin to generate and manage API keys.
Generating an API Key
- In Security Journey, go to Admin > Connections > Reporting API.
- Click Create Reporting API Key.
- Enter a name for the key.
- Copy the key and store it in a secure location.
Authentication
Authorization header as a Bearer token.Authorization: Bearer {YOUR_API_TOKEN}API Documentation
The Reporting API route is:
POST
https://my.securityjourney.com/api/v3/public-reporting/{endpoint}
Headers
Authorization: Bearer {your_api_token}
Content-Type: application/json
Reporting Endpoints
| Function | Endpoint |
| Users progress in their level and current path enrollment | /api/v3/public-reporting/enrollments |
| Users Details |
/api/v3/public-reporting/users |
| Users progress in assignments |
/api/v3/public-reporting/assignments |
| Users lesson attempt data (lessons started & completed) | /api/v3/public-reporting/lesson-attempts |
| Users progress in all their paths |
/api/v3/public-reporting/progress |
| Users Champion Passport activity details |
/api/v3/public-reporting/activities |
| User Assessment data |
/svc/public-reporting/assessments |
| Developer Profile and User Profile Data |
/svc/public-reporting/user-profiles |
| Users progress in any path a user has been enrolled in, regardless of level |
/api/v3/public-reporting/path-enrollments |
| Content Catalog details like Name, Description, and URLs for individual lessons and paths |
/api/v3/public-reporting/content-catalog |
Example Responses
Some fields in the responses are optional. Fields like company, jobRole, and securityChampion are only returned when that data has been uploaded to the Security Journey platform. See Learner Attributes for more information.
The examples below may include additional fields to demonstrate possible responses, but these fields are not guaranteed to be present.
GET https://my.securityjourney.com/api/v3/public-reporting/enrollments
{
"enrollments":[
{
"user":{
"email":"john_smith@securityjourney.com",
"firstName":"John",
"lastName":"Smith",
"totalPoints":0,
"securityChampion":"f",
"archived":true,
"archivedAt":"2024-04-09T13:45:43.355836Z"
},
"levelEnrollment":{
"levelName":"Foundational",
"levelType":"level",
"status":"in_progress",
"totalLessons":7,
"passedLessons":0,
"pointsEarned":0,
"updatedAt":"2024-01-22T13:46:24.193Z",
"createdAt":"2024-01-22T13:46:24.193Z"
},
"pathEnrollment":{
"pathName":"HackEDU: OWASP API Top 10",
"status":""
}
}
GET https://my.securityjourney.com/api/v3/public-reporting/users
{
"email":"john_smith@securityjourney.com",
"firstName":"John",
"lastName":"Smith",
"totalPoints":0,
"securityChampion":"f",
"archived":true,
"archivedAt":"2023-12-15T19:48:33.630916Z"
}
GET https://my.securityjourney.com/api/v3/public-reporting/assignments
{
"assignments":[
{
"user":{
"email":"john_smith@securityjourney.com",
"firstName":"John",
"lastName":"Smith",
"totalPoints":2767,
"company":"SecurityJourney",
"jobRole":"Sr. Devops Engineer",
"businessUnit":"DevOps",
"team":"DevOps",
"securityChampion":"false",
"timeSpent":"49h1m50.000000s"
},
"assignmentName":"Annual Compliance Training",
"pathName":"Content Engineering 2024",
"dueDate":"2025-05-30T23:59:59Z",
"passedLessons":0,
"totalLessons":14,
"status":"overdue"
}
GET https://my.securityjourney.com/api/v3/public-reporting/lesson-attempts
{
"user":{
"email":"john_smith@securityjourney.com",
"firstName":"John",
"lastName":"Smith",
"totalPoints":16069,
"securityChampion":"f",
"archived":true,
"archivedAt":"2023-12-15T19:49:55.539130Z",
"timeSpent":"4h52m25.000000s"
},
"lessonName":"Ruby Static Code Analysis",
"difficulty":"advanced",
"length":"9m",
"status":"passed",
"questions":10,
"correctAnswers":8,
"watchedVideo":"watched",
"readTranscript":"not read",
"startedAt":"2023-02-24T21:07:45.715429Z",
"createdAt":"2023-02-24T21:07:45.567756Z",
"updatedAt":"2023-02-24T21:14:52.087774Z"
}
GET https://my.securityjourney.com/api/v3/public-reporting/progress
{
"user":{
"email":"john_smith@securityjourney.com",
"firstName":"John",
"lastName":"Smith",
"totalPoints":0,
"company":"Security Journey",
"jobRole":"Web Developer",
"securityChampion":"false",
"archived":true,
"archivedAt":"2024-11-13T19:12:31.140936Z"
},
"pathName":"HackEDU: OWASP API Top 10",
"levelName":"Foundational",
"status":"not_started",
"requiredLessons":7,
"requiredLessonsPassed":0,
"lessonsPassed":0,
"allLessons":7,
"startedAt":"2024-03-21T20:26:46.371061Z",
"lastEngagement":"2024-03-21T20:26:46.371061Z",
"createdAt":"2024-03-21T20:26:46.371061Z",
"updatedAt":"2024-07-12T10:54:49.217408Z",
"timeSpent":"0h0m0s",
"pathArchived":true,
"pathArchivedAt":"2024-11-13T19:12:31.140936Z"
}
GET https://my.securityjourney.com/api/v3/public-reporting/activities
{
"activities":[
{
"user":{
"email":"john_smith@securityjourney.com",
"firstName":"John",
"lastName":"Smith",
"totalPoints":16069,
"archived":true,
"archivedAt":"2023-12-15T19:49:55.539130Z",
"timeSpent":"4h52m25.000000s"
},
"text":"Teach by delivering a presentation or talk for my group",
"description":"Presentation about side channel attacks. Explains what a side channel attack is, gives some examples, and gives examples relevant to AWS. Provides a technical explanation of how a side channel attack like spectre can work.",
"points":3,
"status":"in_progress",
"levelName":"Professional",
"createdAt":"2023-06-16T18:35:52.208612Z",
"updatedAt":"2023-06-22T18:55:32.418682Z"
}
GET https://my.securityjourney.com/api/v3/public-reporting/assessments
{
"assessmentName":"Engineering Secure Coding Assessment",
"userGivenName":"John",
"userFamilyName":"Smith",
"userEmail":"john_smith@securityjourney.com",
"programmingLanguage":"ccp",
"status":"completed",
"scorePercentage":50,
"completionDate":"2025-02-04T22:03:47.130308Z",
"dueDate":"2025-01-25T21:42:50.564Z",
"proficiencyScore":"Foundational",
"timeSpentSeconds":83608,
"categories":[
"secure-coding"
],
"topicScores":[
{
"path":"secure-coding/authentication-and-authorization-issues",
"names":[
"Secure Coding",
"Authentication and Authorization Issues"
],
"earnedPoints":1,
"possiblePoints":1
},
{
"path":"secure-coding/concurrency-issues",
"names":[
"Secure Coding",
"Concurrency Issues"
],
"earnedPoints":0,
"possiblePoints":1
}
]
}
GET https://my.securityjourney.com/api/svc/public-reporting/user-profiles
{
"email":"john_smith@securityjourney.com",
"name":{
"familyName":"Smith",
"givenName":"John"
},
"attributes":{
"employeeNumber":"123456",
"jobRole":"Front End Engineer",
"title":"",
"country":"",
"company":"Security Journey",
"businessUnit":"Engineering",
"department":"",
"teamName":"",
"managersEmail":"",
"managersName":"",
"securityChampion":false
},
"createdAt":"2023-06-26T17:58:54Z",
"lastSeen":"2025-09-09T16:02:35Z",
"updatedAt":"2025-04-30T16:16:37.590660Z",
"developerProfile":{
"experience":"experienced",
"jobFunction":"frontend_web_developer",
"expertise":"reads_writes_code_regularly",
"language":"javascript",
"topics":[
"docker"
],
"githubUsername":""
}
Note: "status" : "abandoned" means that the user has switched paths. In the Platform UI, it will be displayed as "paused."
GET https://my.securityjourney.com/api/v3/public-reporting/path-enrollments
{
"pathEnrollments": [
{
"userEmail": "john_smith@securityjourney.com",
"pathId": "adv-for-block-secq",
"status": "in_progress",
"pathTimeSpent": "02:05:23",
"startedAt": "2026-04-27T21:08:04.405055Z",
"lastAccessedAt": "2026-04-28T13:13:05.046146Z",
"completedLessons": 7,
"totalLessons": 10
}
]
}
Available filters:
emailpath_idstatus (example of filtering by multiple statuses: status=in_progress&status=abandoned)updated_afterstarted_atcompleted_at
Sorting options:
sort_by (possible values: last_accessed, user_email, enrollment_status)order_type (possible values: asc or desc)limit (max limit is 3000 records per page)offset
GET https://my.securityjourney.com/api/v3/public-reporting/content-catalog
{
"path": [
{
"pathId": "advanced-c",
"pathName": "Advanced: C",
"pathDescription": "Secure application design, secure coding, and specialized C security topics, ranging from vulnerabilities, secure memory management, and secure programming techniques.",
"pathDuration": 295,
"active": true,
"pathUrl": "https://my.securityjourney.com/path/advanced-c",
"lessons": [
{
"lessonName": "Intro to Secure Development",
"lessonDescription": "The definition of secure development and it's pieces. Secure development starts and ends with the developer.",
"lessonDuration": 5,
"lessonUrl": "https://my.securityjourney.com/lesson/intro-to-secure-development"
},
{
"lessonName": "Designing a Secure App or Product",
"lessonDescription": "The four pillars of a secure application or product, secure application or product decisions, and the building blocks of secure design.",
"lessonDuration": 6,
"lessonUrl": "https://my.securityjourney.com/lesson/designing-a-secure-app-or-product"
},
{
"lessonName": "Secure Design Principles in Action: Part 1",
"lessonDescription": "Economy of mechanism, secure the weakest link, establish trust boundaries, defense in depth, don't' reinvent the wheel, usable security and default deny.",
"lessonDuration": 13,
"lessonUrl": "https://my.securityjourney.com/lesson/secure-design-principles-in-action-part-1"
},
{
"lessonName": "Secure Design Principles in Action: Part 2",
"lessonDescription": "Validate inputs, avoid bypass attacks, secure trust relationships, least privilege, fail securely, secure data at rest, and audit/verify.",
"lessonDuration": 12,
"lessonUrl": "https://my.securityjourney.com/lesson/secure-design-principles-in-action-part-2"
},
{
"lessonName": "Intro to Secure Coding",
"lessonDescription": "The need for secure coding, what are secure coding standards and how does a developer use them, and the potential dangers of Stack Overflow.",
"lessonDuration": 6,
"lessonUrl": "https://my.securityjourney.com/lesson/intro-to-secure-coding"
},
{
"lessonName": "Producing Clean, Maintainable, and Secure Code",
"lessonDescription": "Defines clean, maintainable, and secure code and gives eight tips on how to create it.",
"lessonDuration": 6,
"lessonUrl": "https://my.securityjourney.com/lesson/producing-clean-maintainable-and-secure-code"
}
],
"categories": [
"native_dev"
]
}
]
}
API Specifications and Resources
- Postman Collection
- Use our Postman Collection to start making requests immediately. This collection includes pre-configured examples and workflows that you can run in your local environment to test our API in real-time.
- OpenAPI/Swagger Specification
- Download our OpenAPI Specification (OAS) to view the full API contract. This machine-readable file is the source of truth for our API structure and can be used to generate client libraries or integrate with your own development tools.
Additional Resources