Learn
Creates a new learning program in DRAFT status
Required permissions
Edit Tenant Details (tenant.edit)
The unique identifier of the tenant.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
A learning program was created successfully.
Bad Request: A parameter provided as a part of the request was invalid.
Unauthorized: the request requires an authentication token.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
POST /rest/tenants/{tenant_id}/learn/learning_programs HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Content-Type: application/vnd.api+json
Accept: */*
Content-Length: 86
{
"data": {
"attributes": {
"description": "text",
"name": "text"
},
"type": "learning_program"
}
}
{
"data": {
"attributes": {
"created_at": "2025-09-02T17:11:43.657Z",
"creator_user_id": "123e4567-e89b-12d3-a456-426614174000",
"description": "text",
"duration": 1,
"name": "text",
"start_date": "2025-09-02",
"status": "draft",
"tenant_id": "123e4567-e89b-12d3-a456-426614174000",
"updated_at": "2025-09-02T17:11:43.657Z"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "learning_program"
},
"jsonapi": {
"version": "1.0"
},
"links": {
"self": "https://example.com/api/this_resource"
}
}
Retrieves a paginated list of learning programs available for the specified tenant.
Required permissions
Edit Tenant Details (tenant.edit)
The unique identifier of the tenant.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Number of results to return per page
10
Example: 10
Return the page of results immediately after this cursor
v1.eyJpZCI6IjEwMDAifQo=
Return the page of results immediately before this cursor
v1.eyJpZCI6IjExMDAifQo=
Search learning programs by name (case-insensitive partial match)
Returns a paginated list of learning programs
Bad Request: A parameter provided as a part of the request was invalid.
Unauthorized: the request requires an authentication token.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
GET /rest/tenants/{tenant_id}/learn/learning_programs HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
{
"data": [
{
"attributes": {
"created_at": "2025-09-02T17:11:43.657Z",
"creator_user_id": "123e4567-e89b-12d3-a456-426614174000",
"description": "text",
"duration": 1,
"name": "text",
"start_date": "2025-09-02",
"status": "draft",
"tenant_id": "123e4567-e89b-12d3-a456-426614174000",
"updated_at": "2025-09-02T17:11:43.657Z"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "learning_program"
}
],
"jsonapi": {
"version": "1.0"
},
"links": {
"first": "https://example.com/api/resource?ending_before=v1.eyJpZCI6IjExIn0K",
"last": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjMwIn0K",
"next": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjEwIn0K"
}
}
Retrieves a single learning program by its ID for the specified tenant.
Required permissions
Edit Tenant Details (tenant.edit)
The unique identifier of the tenant.
The unique identifier of the learning program.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Returns a single learning program
Bad Request: A parameter provided as a part of the request was invalid.
Unauthorized: the request requires an authentication token.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
GET /rest/tenants/{tenant_id}/learn/learning_programs/{learning_program_id} HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
{
"data": {
"attributes": {
"created_at": "2025-09-02T17:11:43.657Z",
"creator_user_id": "123e4567-e89b-12d3-a456-426614174000",
"description": "text",
"duration": 1,
"name": "text",
"start_date": "2025-09-02",
"status": "draft",
"tenant_id": "123e4567-e89b-12d3-a456-426614174000",
"updated_at": "2025-09-02T17:11:43.657Z"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "learning_program"
},
"jsonapi": {
"version": "1.0"
},
"links": {
"self": "https://example.com/api/this_resource"
}
}
Deletes a learning program by its ID for the specified tenant.
Required permissions
Edit Tenant Details (tenant.edit)
The unique identifier of the tenant.
The unique identifier of the learning program.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
The learning program was deleted successfully.
Bad Request: A parameter provided as a part of the request was invalid.
Unauthorized: the request requires an authentication token.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
DELETE /rest/tenants/{tenant_id}/learn/learning_programs/{learning_program_id} HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
No content
Retrieves a paginated list of participants enrolled in a specific learning program.
Required permissions
Edit Tenant Details (tenant.edit)
The unique identifier of the tenant.
The unique identifier of the learning program.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Number of results to return per page
10
Example: 10
Return the page of results immediately after this cursor
v1.eyJpZCI6IjEwMDAifQo=
Return the page of results immediately before this cursor
v1.eyJpZCI6IjExMDAifQo=
Returns a paginated list of learning program participants
Bad Request: A parameter provided as a part of the request was invalid.
Unauthorized: the request requires an authentication token.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
GET /rest/tenants/{tenant_id}/learn/learning_programs/{learning_program_id}/participants HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
{
"data": [
{
"attributes": {
"learning_program_id": "123e4567-e89b-12d3-a456-426614174000",
"user_id": "123e4567-e89b-12d3-a456-426614174000"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "learning_program_participant"
}
],
"jsonapi": {
"version": "1.0"
},
"links": {
"first": "https://example.com/api/resource?ending_before=v1.eyJpZCI6IjExIn0K",
"last": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjMwIn0K",
"next": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjEwIn0K"
},
"meta": {
"total_participants_count": 1
}
}
Creates content for an existing learning program
Required permissions
Edit Tenant Details (tenant.edit)
The unique identifier of the tenant.
The unique identifier of the learning program.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
The learning program content was created successfully.
Bad Request: A parameter provided as a part of the request was invalid.
Unauthorized: the request requires an authentication token.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
POST /rest/tenants/{tenant_id}/learn/learning_programs/{learning_program_id}/contents HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Content-Type: application/vnd.api+json
Accept: */*
Content-Length: 97
{
"data": [
{
"lesson_id": "123e4567-e89b-12d3-a456-426614174000",
"type": "learning_program_content"
}
]
}
No content
Retrieves a paginated list of contents for a specific learning program.
Required permissions
Edit Tenant Details (tenant.edit)
The unique identifier of the tenant.
The unique identifier of the learning program.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Number of results to return per page
10
Example: 10
Return the page of results immediately after this cursor
v1.eyJpZCI6IjEwMDAifQo=
Return the page of results immediately before this cursor
v1.eyJpZCI6IjExMDAifQo=
Returns a paginated list of learning program contents
Bad Request: A parameter provided as a part of the request was invalid.
Unauthorized: the request requires an authentication token.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
GET /rest/tenants/{tenant_id}/learn/learning_programs/{learning_program_id}/contents HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
{
"data": [
{
"attributes": {
"learning_program_id": "123e4567-e89b-12d3-a456-426614174000",
"lesson_id": "123e4567-e89b-12d3-a456-426614174000"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "learning_program_content"
}
],
"jsonapi": {
"version": "1.0"
},
"links": {
"first": "https://example.com/api/resource?ending_before=v1.eyJpZCI6IjExIn0K",
"last": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjMwIn0K",
"next": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjEwIn0K"
}
}
Retrieves detailed learning progress status per user, including completion dates and history for each catalog resource.
Required permissions
View Organization Snyk Learn Reports (org.learn_report.read)
The unique identifier of the organization.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Return the page of results immediately after this cursor
v1.eyJpZCI6IjEwMDAifQo=
Return the page of results immediately before this cursor
v1.eyJpZCI6IjExMDAifQo=
Number of results to return per page
10
Example: 10
Filter by the learn catalog resource type
lesson
Possible values: This is deprecated, use Titles instead
Filter by the title of the learning path or lesson resource
Filter by progress status of the resources
Filter by user email addresses
["[email protected]","[email protected]"]
Filter by date interval in ISO 8601 format (e.g. 2024-01-01/2024-02-01)
^[\d]{4}-[\d]{2}-[\d]{2}/[\d]{4}-[\d]{2}-[\d]{2}$
Organization reporting users overview
Bad Request: A parameter provided as a part of the request was invalid.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
GET /rest/orgs/{org_id}/learn/progress/users HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
{
"data": [
{
"attributes": {
"completion_date": "2025-09-02T17:11:43.657Z",
"completion_history": [
"2025-09-02T17:11:43.657Z"
],
"is_expired": true,
"resource": "learning_path",
"status": "completed"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"relationships": {
"catalog": {
"data": {
"attributes": {
"cves": [
"text"
],
"cwes": [
"text"
],
"slug": "text",
"title": "text"
},
"id": "text",
"type": "lesson"
},
"links": {
"self": "text"
}
},
"user": {
"data": {
"attributes": {
"email": "text",
"username": "text"
},
"id": "text",
"type": "user"
},
"links": {
"first": "https://example.com/api/resource?ending_before=v1.eyJpZCI6IjExIn0K",
"last": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjMwIn0K",
"next": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjEwIn0K"
}
}
},
"type": "progress"
}
],
"jsonapi": {
"version": "1.0"
},
"links": {
"first": "https://example.com/api/resource?ending_before=v1.eyJpZCI6IjExIn0K",
"last": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjMwIn0K",
"next": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjEwIn0K"
}
}
Retrieves aggregated counts of users' lesson or learning path statuses (completed, in progress, todo) across all catalog resources for an organization.
Required permissions
View Organization Snyk Learn Reports (org.learn_report.read)
The unique identifier of the organization.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Return the page of results immediately after this cursor
v1.eyJpZCI6IjEwMDAifQo=
Return the page of results immediately before this cursor
v1.eyJpZCI6IjExMDAifQo=
Number of results to return per page
10
Example: 10
Filter by the learn catalog resource type
lesson
Possible values: This is deprecated, use Titles instead
Filter by CWE rules
Filter by CVE rules
Organization reporting users overview
Bad Request: A parameter provided as a part of the request was invalid.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
GET /rest/orgs/{org_id}/learn/progress/catalog HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
{
"data": [
{
"attributes": {
"completed_count": 1,
"in_progress_count": 1,
"todo_count": 1,
"users_completed_count": 1,
"users_in_progress_count": 1,
"users_todo_count": 1
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"relationships": {
"catalog": {
"data": {
"attributes": {
"cves": [
"text"
],
"cwes": [
"text"
],
"slug": "text",
"title": "text"
},
"id": "text",
"type": "lesson"
},
"links": {
"self": "text"
}
}
},
"type": "progress"
}
],
"jsonapi": {
"version": "1.0"
},
"links": {
"first": "https://example.com/api/resource?ending_before=v1.eyJpZCI6IjExIn0K",
"last": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjMwIn0K",
"next": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjEwIn0K"
},
"meta": {
"total_org_members": 1
}
}
Allows an admin to create assignments in bulk for all or a subset of users within their organization.
Required permissions
Create assignments (org.learn_assignment.create)
The unique identifier of the organization.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Custom message given by assignment creator for email notification.
Email notification is enabled or not for new assignment creation
Assigner will receive a copy of the email
Global flag to reset progress for all lesson assignments in the request
Reset progress for all lesson assignments before this date (exclusive)
Assignments were successfully created.
Bad Request: A parameter provided as a part of the request was invalid.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
POST /rest/orgs/{org_id}/learn/assignments HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Content-Type: application/vnd.api+json
Accept: */*
Content-Length: 302
{
"data": [
{
"attributes": {
"lesson_ids": [
"text"
],
"user_ids": [
"123e4567-e89b-12d3-a456-426614174000"
]
},
"type": "lesson_assignment"
}
],
"due_date": "2025-09-02",
"email_custom_message": "text",
"email_notification": true,
"email_receive_copy": true,
"reset_learning_progress": true,
"reset_progress_before": "2025-09-02"
}
No content
Allows an admin to update the due date for existing assignments within their organization.
Required permissions
Edit assignments (org.learn_assignment.edit)
The unique identifier of the organization.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Assignments due date was successfully updated.
Bad Request: A parameter provided as a part of the request was invalid.
Unauthorized: the request requires an authentication token.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
PATCH /rest/orgs/{org_id}/learn/assignments HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Content-Type: application/vnd.api+json
Accept: */*
Content-Length: 170
{
"data": {
"attributes": {
"assignments_ids": [
"123e4567-e89b-12d3-a456-426614174000"
],
"due_date": "2025-09-02"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "resource"
}
}
No content
Allows an admin to obtain a comprehensive list of all assignments within their organization.
Required permissions
View Organization assignments (org.learn_assignment.read)
The unique identifier of the organization.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Return the page of results immediately after this cursor
v1.eyJpZCI6IjEwMDAifQo=
Return the page of results immediately before this cursor
v1.eyJpZCI6IjExMDAifQo=
Number of results to return per page
10
Example: 10
A list of assignments was successfully retrieved.
Bad Request: A parameter provided as a part of the request was invalid.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
GET /rest/orgs/{org_id}/learn/assignments HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
{
"data": [
{
"attributes": {
"due_date": "2025-09-02",
"lesson_id": "text",
"user_id": "123e4567-e89b-12d3-a456-426614174000",
"assigning_user_id": "123e4567-e89b-12d3-a456-426614174000",
"completed_date": "2025-09-02T17:11:43.657Z",
"created_at": "2025-09-02T17:11:43.657Z",
"updated_at": "2025-09-02T17:11:43.657Z",
"assigning_user_email": "text",
"lesson_created_at": "2025-09-02T17:11:43.657Z",
"lesson_slug": "text",
"lesson_title": "text",
"lesson_updated_at": "2025-09-02T17:11:43.657Z",
"user_email": "[email protected]"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "lesson_assignment"
}
],
"jsonapi": {
"version": "1.0"
},
"links": {
"first": "https://example.com/api/resource?ending_before=v1.eyJpZCI6IjExIn0K",
"last": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjMwIn0K",
"next": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjEwIn0K"
}
}
Allows an admin to delete multiple assignments within their organization.
Required permissions
Delete assignments (org.learn_assignment.delete)
The unique identifier of the organization.
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
Assignments were successfully deleted.
Bad Request: A parameter provided as a part of the request was invalid.
Forbidden: the request requires an authentication token with more or different permissions.
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
DELETE /rest/orgs/{org_id}/learn/assignments HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Content-Type: application/vnd.api+json
Accept: */*
Content-Length: 83
{
"data": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "lesson_assignment"
}
]
}
No content
List Snyk Learn's catalog resources
Requested API version
2024-05-13~experimental
Example: 2024-05-13~experimental
Pattern: ^(wip|work-in-progress|experimental|beta|((([0-9]{4})-([0-1][0-9]))-((3[01])|(0[1-9])|([12][0-9]))(~(wip|work-in-progress|experimental|beta))?))$
The source of educational resources
Number of results to return per page
10
Example: 10
Return the page of results immediately after this cursor
v1.eyJpZCI6IjEwMDAifQo=
Return the page of results immediately before this cursor
v1.eyJpZCI6IjExMDAifQo=
Returns a list of catalog resources
Not Found: The resource being operated on could not be found.
Internal Server Error: An error was encountered while attempting to process the request.
GET /rest/learn/catalog HTTP/1.1
Host: api.snyk.io
Authorization: YOUR_API_KEY
Accept: */*
{
"data": [
{
"attributes": {
"author": "text",
"date_published": "2025-09-02",
"description": "text",
"education_content_category": "security education",
"estimated_duration": 1,
"image": "text",
"lesson_ids": [
"text"
],
"name": "text",
"seo_title": "text",
"slug": "text",
"tags": [
{
"tag_type": "text",
"tag_values": [
"text"
]
}
],
"url": "text"
},
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "lesson"
}
],
"jsonapi": {
"version": "1.0"
},
"links": {
"first": "https://example.com/api/resource?ending_before=v1.eyJpZCI6IjExIn0K",
"last": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjMwIn0K",
"next": "https://example.com/api/resource?starting_after=v1.eyJpZCI6IjEwIn0K"
}
}
Last updated
Was this helpful?