API Reference

Get a student portfolio

get

Retrieve a student portfolio by its UUID

Path parameters
uuidstring · uuidRequired

Student Portfolio UUID

Responses
200

Student portfolio retrieved successfully

application/json
get
GET /v1/student-portfolios/{uuid} HTTP/1.1
Host: 
Accept: */*
{
  "teacherPortfolio": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "userId": "123e4567-e89b-12d3-a456-426614174000",
    "title": "text",
    "description": "text",
    "coverImageUrl": "text",
    "courseIds": [
      1
    ],
    "skills": [
      {
        "name": "text",
        "status": "not_completed",
        "mentionCount": 1
      }
    ],
    "sections": {
      "defaultSection": {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text",
                "status": "not_completed",
                "mentionCount": 1
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      },
      "userSections": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "requirements": [
            {
              "uuid": "123e4567-e89b-12d3-a456-426614174000",
              "userId": "123e4567-e89b-12d3-a456-426614174000",
              "title": "text",
              "description": "text",
              "reflectionQuestions": [
                "text"
              ],
              "order": 1,
              "createdAt": "2025-10-13T22:01:39.903Z",
              "updatedAt": "2025-10-13T22:01:39.903Z",
              "skills": [
                {
                  "name": "text",
                  "status": "not_completed",
                  "mentionCount": 1
                }
              ],
              "type": "project",
              "canvasAssignmentId": 1,
              "courseId": 1,
              "courseName": "text",
              "gradingType": "text",
              "htmlUrl": "text",
              "pointsPossible": 1,
              "submissionTypes": [
                "text"
              ]
            }
          ],
          "order": 1
        }
      ]
    },
    "teacherPortfolioState": "draft"
  },
  "studentPortfolio": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "canvasStudentId": 1,
    "status": "not_started",
    "evidences": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "requirementId": "123e4567-e89b-12d3-a456-426614174000",
        "status": "not_submitted",
        "description": "text",
        "reflection": "text",
        "links": [
          "text"
        ],
        "attachments": [
          {
            "url": "text",
            "mimeType": "text",
            "fileSize": 1,
            "fileName": "text"
          }
        ],
        "teammateCanvasIds": [
          1
        ],
        "commentCount": 1,
        "skillCount": 1
      }
    ],
    "assignmentSubmissions": [
      {
        "assignmentId": 1,
        "assignmentName": "text",
        "assignmentDescription": "text",
        "courseId": 1,
        "courseName": "text",
        "htmlUrl": "text",
        "submissionType": "text",
        "submissionLink": "text",
        "body": "text",
        "pointsPossible": 1,
        "gradingType": "text",
        "score": 1,
        "commentCount": 1,
        "status": "unsubmitted",
        "createdAt": "2025-10-13T22:01:39.903Z"
      }
    ],
    "createdAt": "2025-10-13T22:01:39.903Z",
    "updatedAt": "2025-10-13T22:01:39.903Z"
  }
}

Get teammates

get

Get teammates for a student portfolio

Path parameters
portfolioIdstringRequired
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
sortBystringOptional

Field to sort by

sortOrderstring · enumOptional

Sort order

Possible values:
searchstringOptional

Search query

Responses
200

Students retrieved successfully

application/json
get
GET /v1/student-portfolios/{portfolioId}/teammates HTTP/1.1
Host: 
Accept: */*
200

Students retrieved successfully

{
  "data": [
    {
      "canvasUserId": 1,
      "name": "text",
      "sortableName": "text",
      "email": "text",
      "avatarUrl": "text"
    }
  ],
  "meta": {
    "total": 1,
    "page": 1,
    "lastPage": 1,
    "hasNextPage": true,
    "hasPreviousPage": true
  }
}

Create Evidence

post

Create a new evidence for a student portfolio

Path parameters
portfolioIdstringRequired

Student Portfolio UUID

Body
requirementIdstring · uuidRequired
descriptionstring | nullableRequired
reflectionstring | nullableRequired
linksstring[]Required
teammateCanvasIdsnumber[]Required
statusall of | nullableRequired
string · enumOptionalPossible values:
Responses
200

Evidence created successfully

application/json
post
POST /v1/student-portfolios/{portfolioId}/evidences HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 243

{
  "requirementId": "123e4567-e89b-12d3-a456-426614174000",
  "description": "text",
  "reflection": "text",
  "links": [
    "text"
  ],
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "teammateCanvasIds": [
    1
  ],
  "status": "not_submitted"
}
200

Evidence created successfully

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "requirementId": "123e4567-e89b-12d3-a456-426614174000",
  "status": "not_submitted",
  "description": "text",
  "reflection": "text",
  "links": [
    "text"
  ],
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "teammateCanvasIds": [
    1
  ],
  "commentCount": 1,
  "skillCount": 1
}

Update Evidence

patch

Update an existing evidence for a student portfolio

Path parameters
uuidstringRequired

Evidence UUID

portfolioIdstringRequired

Student Portfolio UUID

Body
statusall of | nullableOptional
string · enumOptionalPossible values:
descriptionstring | nullableOptional
reflectionstring | nullableOptional
linksstring[]Optional
teammateCanvasIdsnumber[]Optional
Responses
200

Evidence updated successfully

application/json
patch
PATCH /v1/student-portfolios/{portfolioId}/evidences/{uuid} HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 188

{
  "status": "not_submitted",
  "description": "text",
  "reflection": "text",
  "links": [
    "text"
  ],
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "teammateCanvasIds": [
    1
  ]
}
200

Evidence updated successfully

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "requirementId": "123e4567-e89b-12d3-a456-426614174000",
  "status": "not_submitted",
  "description": "text",
  "reflection": "text",
  "links": [
    "text"
  ],
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "teammateCanvasIds": [
    1
  ],
  "commentCount": 1,
  "skillCount": 1
}

Get Evidence

get

Get a specific evidence by its UUID

Path parameters
uuidstringRequired

Evidence UUID

portfolioIdstringRequired

Student Portfolio UUID

Responses
200

Evidence retrieved successfully

application/json
get
GET /v1/student-portfolios/{portfolioId}/evidences/{uuid} HTTP/1.1
Host: 
Accept: */*
{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "requirementId": "123e4567-e89b-12d3-a456-426614174000",
  "status": "not_submitted",
  "description": "text",
  "reflection": "text",
  "links": [
    "text"
  ],
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "teammateCanvasIds": [
    1
  ],
  "commentCount": 1,
  "skillCount": 1
}

Delete Evidence

delete

Delete a specific evidence by its UUID

Path parameters
uuidstringRequired

Evidence UUID

portfolioIdstringRequired

Student Portfolio UUID

Responses
200

Evidence deleted successfully

No content

delete
DELETE /v1/student-portfolios/{portfolioId}/evidences/{uuid} HTTP/1.1
Host: 
Accept: */*
200

Evidence deleted successfully

No content

Get teammates

get

Retrieve teammates associated with a specific evidence

Path parameters
uuidstringRequired

Evidence UUID

portfolioIdstringRequired

Student Portfolio UUID

Responses
200

Teammates retrieved successfully

application/json
get
GET /v1/student-portfolios/{portfolioId}/evidences/{uuid}/teammates HTTP/1.1
Host: 
Accept: */*
[
  {
    "canvasUserId": 1,
    "name": "text",
    "email": "text",
    "avatarUrl": "text"
  }
]

Add Requirement Section

post

Add a new requirement section to a teacher portfolio

Path parameters
uuidstringRequired

Teacher Portfolio UUID

Body
titlestringRequired
evidenceIdsstring[]Required
Responses
201

The section has been successfully added.

application/json
post
POST /v1/teacher-portfolios/{uuid}/sections HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 39

{
  "title": "text",
  "evidenceIds": [
    "text"
  ]
}
{
  "defaultSection": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "title": "text",
    "requirements": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "userId": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "description": "text",
        "reflectionQuestions": [
          "text"
        ],
        "order": 1,
        "createdAt": "2025-10-13T22:01:39.903Z",
        "updatedAt": "2025-10-13T22:01:39.903Z",
        "skills": [
          {
            "name": "text",
            "status": "not_completed",
            "mentionCount": 1
          }
        ],
        "type": "project",
        "canvasAssignmentId": 1,
        "courseId": 1,
        "courseName": "text",
        "gradingType": "text",
        "htmlUrl": "text",
        "pointsPossible": 1,
        "submissionTypes": [
          "text"
        ]
      }
    ],
    "order": 1
  },
  "userSections": [
    {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text",
              "status": "not_completed",
              "mentionCount": 1
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    }
  ]
}

Add Requirement

post

Add a new requirement to a teacher portfolio

Path parameters
portfolioIdstringRequired

Teacher Portfolio UUID

Body
typestring · enumRequiredPossible values:
titlestringRequired
descriptionstringOptional
reflectionQuestionsstring[] | nullableOptional
Responses
201

Successfully added requirement

application/json
post
POST /v1/teacher-portfolios/{portfolioId}/requirements HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 112

{
  "type": "project",
  "title": "text",
  "description": "text",
  "reflectionQuestions": [
    "text"
  ],
  "skills": [
    {
      "name": "text"
    }
  ]
}
201

Successfully added requirement

{
  "defaultSection": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "title": "text",
    "requirements": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "userId": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "description": "text",
        "reflectionQuestions": [
          "text"
        ],
        "order": 1,
        "createdAt": "2025-10-13T22:01:39.903Z",
        "updatedAt": "2025-10-13T22:01:39.903Z",
        "skills": [
          {
            "name": "text",
            "status": "not_completed",
            "mentionCount": 1
          }
        ],
        "type": "project",
        "canvasAssignmentId": 1,
        "courseId": 1,
        "courseName": "text",
        "gradingType": "text",
        "htmlUrl": "text",
        "pointsPossible": 1,
        "submissionTypes": [
          "text"
        ]
      }
    ],
    "order": 1
  },
  "userSections": [
    {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text",
              "status": "not_completed",
              "mentionCount": 1
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    }
  ]
}

Add assignments

post

Add one or more assignments to the specified teacher portfolio.

Path parameters
portfolioIdstringRequired
Body
assignmentIdsnumber[]Required

Array of Canvas assignment IDs to add to the teacher portfolio

Responses
201

Successfully added assignments to the teacher portfolio

application/json
post
POST /v1/teacher-portfolios/{portfolioId}/assignments HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 21

{
  "assignmentIds": [
    1
  ]
}
201

Successfully added assignments to the teacher portfolio

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "courseIds": [
    1
  ],
  "skills": [
    {
      "name": "text",
      "status": "not_completed",
      "mentionCount": 1
    }
  ],
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text",
              "status": "not_completed",
              "mentionCount": 1
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text",
                "status": "not_completed",
                "mentionCount": 1
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      }
    ]
  },
  "teacherPortfolioState": "draft"
}

Add a comment

post

Add a new comment to evidence feedback

Path parameters
portfolioIdstringRequired

Student Portfolio UUID

evidenceIdstringRequired

Evidence UUID

Body
messagestringRequired
Responses
201

Comment added successfully

application/json
post
POST /v1/student-portfolios/{portfolioId}/evidences/{evidenceId}/feedback/comments HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 18

{
  "message": "text"
}
201

Comment added successfully

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "profile": {
    "canvasUserId": 1,
    "name": "text",
    "sortableName": "text",
    "email": "text",
    "avatarUrl": "text"
  },
  "message": "text",
  "createdAt": "2025-10-13T22:01:39.903Z"
}

Get comments

get

Retrieve comments for a specific evidence

Path parameters
portfolioIdstringRequired

Student Portfolio UUID

evidenceIdstringRequired

Evidence UUID

Responses
200

Comments retrieved successfully

application/json
get
GET /v1/student-portfolios/{portfolioId}/evidences/{evidenceId}/feedback/comments HTTP/1.1
Host: 
Accept: */*
200

Comments retrieved successfully

[
  {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "profile": {
      "canvasUserId": 1,
      "name": "text",
      "sortableName": "text",
      "email": "text",
      "avatarUrl": "text"
    },
    "message": "text",
    "createdAt": "2025-10-13T22:01:39.903Z"
  }
]

Add feedback with comment and grade

post

Add feedback with comment and grade

Path parameters
portfolioIdstringRequired

Student Portfolio UUID

evidenceIdstringRequired

Evidence UUID

Body
commentstringOptional
gradeall of | nullableRequired
string · enumOptionalPossible values:
Responses
201

Feedback added successfully

application/json
post
POST /v1/student-portfolios/{portfolioId}/evidences/{evidenceId}/feedback HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 33

{
  "comment": "text",
  "grade": "pass"
}
201

Feedback added successfully

{
  "comment": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "profile": {
      "canvasUserId": 1,
      "name": "text",
      "sortableName": "text",
      "email": "text",
      "avatarUrl": "text"
    },
    "message": "text",
    "createdAt": "2025-10-13T22:01:39.903Z"
  },
  "grade": "pass"
}

Export student portfolio as HTML

get
Path parameters
studentPortfolioIdstringRequired

studentPortfolioId of the student portfolio to export

Responses
200

The HTML representation of the student portfolio

application/json
Responsestring · binary
get
GET /v1/export/studentPortfolio/{studentPortfolioId} HTTP/1.1
Host: 
Accept: */*
binary

Export showcase portfolio as HTML

get
Path parameters
showcasePortfolioIdstringRequired

showcasePortfolioId of the showcase portfolio to export

Responses
200

The HTML representation of the showcase portfolio

application/json
Responsestring · binary
get
GET /v1/export/showcasePortfolio/{showcasePortfolioId} HTTP/1.1
Host: 
Accept: */*
binary

Create Showcase Evidence

post

Create a new evidence for a showcase portfolio

Path parameters
showcasePortfolioIdstringRequired

Showcase Portfolio UUID

Body
titlestring · min: 1Required

Title of the evidence.

descriptionstringOptional

Description of the evidence.

reflectionstringOptional

Personal reflection on the evidence.

typestring · enumRequiredPossible values:
linksstring[]Optional

Associated links for the evidence.

tagsstring[]Optional

Tags for the evidence.

Responses
201

Showcase Evidence created successfully

application/json
post
POST /v1/showcase-portfolios/{showcasePortfolioId}/showcase-evidences HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 187

{
  "title": "text",
  "description": "text",
  "reflection": "text",
  "type": "project",
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "links": [
    "text"
  ],
  "tags": [
    "text"
  ]
}
{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "title": "text",
  "description": "text",
  "order": 1,
  "reflection": "text",
  "links": [
    "text"
  ],
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "tags": [
    "text"
  ],
  "createdAt": "2025-10-13T22:01:39.903Z",
  "updatedAt": "2025-10-13T22:01:39.903Z",
  "type": "project",
  "canvasAssignmentId": 1,
  "courseId": 1,
  "courseName": "text",
  "gradingType": "text",
  "htmlUrl": "text",
  "pointsPossible": 1,
  "submissionTypes": [
    "text"
  ],
  "assignmentSubmissionBody": "text"
}

Update Showcase Evidence

patch

Update an existing evidence for a showcase portfolio

Path parameters
showcaseEvidenceIdstringRequired

Showcase Evidence UUID

showcasePortfolioIdstringRequired

Showcase Portfolio UUID

Body
uuidstring · uuidRequired

The UUID of the evidence to be updated.

titlestringRequired

The new title for the evidence.

descriptionstring | nullableOptional

The new description for the evidence.

reflectionstringOptional

The new personal reflection on the evidence.

linksstring[]Optional

The updated list of associated links for the evidence. This typically replaces the existing list.

tagsstring[]Optional

The updated list of tags for the evidence. This typically replaces the existing list.

ordernumberRequired

The updated order of the evidence

typestring · enumRequiredPossible values:
Responses
200

Showcase Evidence updated successfully

application/json
patch
PATCH /v1/showcase-portfolios/{showcasePortfolioId}/showcase-evidences/{showcaseEvidenceId} HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 243

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "title": "text",
  "description": "text",
  "reflection": "text",
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "links": [
    "text"
  ],
  "tags": [
    "text"
  ],
  "order": 1,
  "type": "project"
}
{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "title": "text",
  "description": "text",
  "order": 1,
  "reflection": "text",
  "links": [
    "text"
  ],
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "tags": [
    "text"
  ],
  "createdAt": "2025-10-13T22:01:39.903Z",
  "updatedAt": "2025-10-13T22:01:39.903Z",
  "type": "project",
  "canvasAssignmentId": 1,
  "courseId": 1,
  "courseName": "text",
  "gradingType": "text",
  "htmlUrl": "text",
  "pointsPossible": 1,
  "submissionTypes": [
    "text"
  ],
  "assignmentSubmissionBody": "text"
}

Get Showcase Evidence

get

Retrieve a specific evidence by its UUID

Path parameters
showcaseEvidenceIdstringRequired

Showcase Evidence UUID

showcasePortfolioIdstringRequired

Showcase Portfolio UUID

Responses
200

Showcase Evidence retrieved successfully

application/json
get
GET /v1/showcase-portfolios/{showcasePortfolioId}/showcase-evidences/{showcaseEvidenceId} HTTP/1.1
Host: 
Accept: */*
{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "title": "text",
  "description": "text",
  "order": 1,
  "reflection": "text",
  "links": [
    "text"
  ],
  "attachments": [
    {
      "url": "text",
      "mimeType": "text",
      "fileSize": 1,
      "fileName": "text"
    }
  ],
  "tags": [
    "text"
  ],
  "createdAt": "2025-10-13T22:01:39.903Z",
  "updatedAt": "2025-10-13T22:01:39.903Z",
  "type": "project",
  "canvasAssignmentId": 1,
  "courseId": 1,
  "courseName": "text",
  "gradingType": "text",
  "htmlUrl": "text",
  "pointsPossible": 1,
  "submissionTypes": [
    "text"
  ],
  "assignmentSubmissionBody": "text"
}

Delete Showcase Evidence

delete

Delete a specific evidence by its UUID

Path parameters
showcaseEvidenceIdstringRequired

Showcase Evidence UUID

showcasePortfolioIdstringRequired

Showcase Portfolio UUID

Responses
200

Showcase Evidence deleted successfully

No content

delete
DELETE /v1/showcase-portfolios/{showcasePortfolioId}/showcase-evidences/{showcaseEvidenceId} HTTP/1.1
Host: 
Accept: */*

No content

Partially update a showcase portfolio

patch
Authorizations
Path parameters
uuidstring · uuidRequired

Showcase Portfolio UUID

Body
titlestringOptional

The new title for the showcase portfolio.

descriptionstringOptional

The new description for the showcase portfolio.

coverImageUrlstringOptional

New URL for the cover image. Send an empty string or null to remove the existing image.

statusstring · enumOptional

The new status for the showcase portfolio.

Possible values:
sectionsall ofOptional

The sections and their evidences for the showcase portfolio.

Responses
200

The showcase portfolio has been successfully updated.

application/json
patch
PATCH /v1/showcase-portfolios/{uuid} HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 786

{
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "status": "DRAFT",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "order": 1,
      "evidences": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "reflection": "text",
          "attachments": [
            {
              "url": "text",
              "mimeType": "text",
              "fileSize": 1,
              "fileName": "text"
            }
          ],
          "links": [
            "text"
          ],
          "tags": [
            "text"
          ],
          "order": 1,
          "type": "project"
        }
      ]
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "order": 1,
        "evidences": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "reflection": "text",
            "attachments": [
              {
                "url": "text",
                "mimeType": "text",
                "fileSize": 1,
                "fileName": "text"
              }
            ],
            "links": [
              "text"
            ],
            "tags": [
              "text"
            ],
            "order": 1,
            "type": "project"
          }
        ]
      }
    ]
  }
}
{
  "uuid": "text",
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "status": "DRAFT",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "order": 1,
      "evidences": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "order": 1,
          "reflection": "text",
          "links": [
            "text"
          ],
          "attachments": [
            {
              "url": "text",
              "mimeType": "text",
              "fileSize": 1,
              "fileName": "text"
            }
          ],
          "tags": [
            "text"
          ],
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ],
          "assignmentSubmissionBody": "text"
        }
      ]
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "order": 1,
        "evidences": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "order": 1,
            "reflection": "text",
            "links": [
              "text"
            ],
            "attachments": [
              {
                "url": "text",
                "mimeType": "text",
                "fileSize": 1,
                "fileName": "text"
              }
            ],
            "tags": [
              "text"
            ],
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ],
            "assignmentSubmissionBody": "text"
          }
        ]
      }
    ]
  },
  "tags": [
    "text"
  ]
}

Get Showcase Portfolio

get
Path parameters
portfolioIdstringRequired

Showcase Portfolio UUID

Responses
200

Showcase Portfolio retrieved successfully

application/json
get
GET /v1/showcase-portfolios/{portfolioId} HTTP/1.1
Host: 
Accept: */*
{
  "uuid": "text",
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "status": "DRAFT",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "order": 1,
      "evidences": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "order": 1,
          "reflection": "text",
          "links": [
            "text"
          ],
          "attachments": [
            {
              "url": "text",
              "mimeType": "text",
              "fileSize": 1,
              "fileName": "text"
            }
          ],
          "tags": [
            "text"
          ],
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ],
          "assignmentSubmissionBody": "text"
        }
      ]
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "order": 1,
        "evidences": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "order": 1,
            "reflection": "text",
            "links": [
              "text"
            ],
            "attachments": [
              {
                "url": "text",
                "mimeType": "text",
                "fileSize": 1,
                "fileName": "text"
              }
            ],
            "tags": [
              "text"
            ],
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ],
            "assignmentSubmissionBody": "text"
          }
        ]
      }
    ]
  },
  "tags": [
    "text"
  ]
}

Create showcase portfolio

post
Body
titlestringOptional

The title of the showcase portfolio.

descriptionstringOptional

A description for the showcase portfolio.

coverImageUrlstringOptional

URL for the cover image of the portfolio.

Example: https://example.com/images/portfolio-cover.jpg
statusstring · enumOptional

The initial status of the showcase portfolio.

Default: DRAFTPossible values:
Responses
201

Showcase Portfolio created successfully

application/json
post
POST /v1/showcase-portfolios HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 900

{
  "title": "text",
  "description": "text",
  "coverImageUrl": "https://example.com/images/portfolio-cover.jpg",
  "status": "DRAFT",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "evidences": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "order": 1,
          "description": "text",
          "reflection": "text",
          "type": "project",
          "attachments": [
            {
              "url": "text",
              "mimeType": "text",
              "fileSize": 1,
              "fileName": "text"
            }
          ],
          "links": [
            "text"
          ],
          "tags": [
            "text"
          ],
          "canvasAssignmentId": 1,
          "courseId": 1
        }
      ],
      "order": 1
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "evidences": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "order": 1,
            "description": "text",
            "reflection": "text",
            "type": "project",
            "attachments": [
              {
                "url": "text",
                "mimeType": "text",
                "fileSize": 1,
                "fileName": "text"
              }
            ],
            "links": [
              "text"
            ],
            "tags": [
              "text"
            ],
            "canvasAssignmentId": 1,
            "courseId": 1
          }
        ],
        "order": 1
      }
    ]
  }
}
{
  "uuid": "text",
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "status": "DRAFT",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "order": 1,
      "evidences": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "order": 1,
          "reflection": "text",
          "links": [
            "text"
          ],
          "attachments": [
            {
              "url": "text",
              "mimeType": "text",
              "fileSize": 1,
              "fileName": "text"
            }
          ],
          "tags": [
            "text"
          ],
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ],
          "assignmentSubmissionBody": "text"
        }
      ]
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "order": 1,
        "evidences": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "order": 1,
            "reflection": "text",
            "links": [
              "text"
            ],
            "attachments": [
              {
                "url": "text",
                "mimeType": "text",
                "fileSize": 1,
                "fileName": "text"
              }
            ],
            "tags": [
              "text"
            ],
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ],
            "assignmentSubmissionBody": "text"
          }
        ]
      }
    ]
  },
  "tags": [
    "text"
  ]
}

Create Showcase Portfolio Section

post
Path parameters
showcasePortfolioIdstringRequired

Showcase Portfolio UUID

Body
titlestringRequired
evidenceIdsstring[]Required
Responses
201

Showcase Portfolio Section added successfully

application/json
post
POST /v1/showcase-portfolios/{showcasePortfolioId}/sections HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 39

{
  "title": "text",
  "evidenceIds": [
    "text"
  ]
}
{
  "defaultSection": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "title": "text",
    "order": 1,
    "evidences": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "userId": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "description": "text",
        "order": 1,
        "reflection": "text",
        "links": [
          "text"
        ],
        "attachments": [
          {
            "url": "text",
            "mimeType": "text",
            "fileSize": 1,
            "fileName": "text"
          }
        ],
        "tags": [
          "text"
        ],
        "createdAt": "2025-10-13T22:01:39.903Z",
        "updatedAt": "2025-10-13T22:01:39.903Z",
        "type": "project",
        "canvasAssignmentId": 1,
        "courseId": 1,
        "courseName": "text",
        "gradingType": "text",
        "htmlUrl": "text",
        "pointsPossible": 1,
        "submissionTypes": [
          "text"
        ],
        "assignmentSubmissionBody": "text"
      }
    ]
  },
  "userSections": [
    {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "order": 1,
      "evidences": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "order": 1,
          "reflection": "text",
          "links": [
            "text"
          ],
          "attachments": [
            {
              "url": "text",
              "mimeType": "text",
              "fileSize": 1,
              "fileName": "text"
            }
          ],
          "tags": [
            "text"
          ],
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ],
          "assignmentSubmissionBody": "text"
        }
      ]
    }
  ]
}

Add Assignment Submission

post
Path parameters
showcasePortfolioIdstringRequired

Showcase Portfolio UUID

Body
assignmentIdsnumber[]Required

Array of Canvas assignment IDs to add to the section

Responses
201

Assignment Submission added successfully

application/json
post
POST /v1/showcase-portfolios/{showcasePortfolioId}/assignment-submissions HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 21

{
  "assignmentIds": [
    1
  ]
}
{
  "assignmentId": 1,
  "assignmentName": "text",
  "assignmentDescription": "text",
  "courseId": 1,
  "courseName": "text",
  "htmlUrl": "text",
  "submissionType": "text",
  "submissionLink": "text",
  "body": "text",
  "pointsPossible": 1,
  "gradingType": "text",
  "score": 1,
  "commentCount": 1,
  "status": "unsubmitted",
  "createdAt": "2025-10-13T22:01:39.903Z"
}

Duplicate Showcase Portfolio with new S3 attachments

post

Creates a complete duplicate of an existing showcase portfolio, including all sections, evidence, and attachments. All S3 attachments are duplicated with new keys to ensure data isolation.

Path parameters
showcasePortfolioIdstringRequired

Showcase Portfolio UUID

Body
titlestringOptional

Title for the duplicated portfolio. If not provided, will use Copy of original title

descriptionstringOptional

Description for the duplicated portfolio. If not provided, will use original description

Responses
201

Showcase Portfolio duplicated successfully

application/json
post
POST /v1/showcase-portfolios/{showcasePortfolioId}/duplicate HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 37

{
  "title": "text",
  "description": "text"
}
{
  "uuid": "text",
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "status": "DRAFT",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "order": 1,
      "evidences": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "order": 1,
          "reflection": "text",
          "links": [
            "text"
          ],
          "attachments": [
            {
              "url": "text",
              "mimeType": "text",
              "fileSize": 1,
              "fileName": "text"
            }
          ],
          "tags": [
            "text"
          ],
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ],
          "assignmentSubmissionBody": "text"
        }
      ]
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "order": 1,
        "evidences": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "order": 1,
            "reflection": "text",
            "links": [
              "text"
            ],
            "attachments": [
              {
                "url": "text",
                "mimeType": "text",
                "fileSize": 1,
                "fileName": "text"
              }
            ],
            "tags": [
              "text"
            ],
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ],
            "assignmentSubmissionBody": "text"
          }
        ]
      }
    ]
  },
  "tags": [
    "text"
  ]
}

Delete a showcase portfolio

delete
Path parameters
showcasePortfolioIdstringRequired

Showcase Portfolio UUID

Responses
200

The showcase portfolio has been successfully deleted.

No content

delete
DELETE /v1/showcase-portfolios/{showcasePortfolioId} HTTP/1.1
Host: 
Accept: */*

No content

Get one teacher portfolio by UUID

get
Path parameters
uuidstringRequired

Teacher Portfolio UUID

Responses
200

Teacher Portfolio retrieved successfully

application/json
get
GET /v1/teacher-portfolios/{uuid} HTTP/1.1
Host: 
Accept: */*
200

Teacher Portfolio retrieved successfully

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "courseIds": [
    1
  ],
  "skills": [
    {
      "name": "text",
      "status": "not_completed",
      "mentionCount": 1
    }
  ],
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text",
              "status": "not_completed",
              "mentionCount": 1
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text",
                "status": "not_completed",
                "mentionCount": 1
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      }
    ]
  },
  "teacherPortfolioState": "draft"
}

Partially update a teacher portfolio

patch
Path parameters
uuidstringRequired

Teacher Portfolio UUID

Body
titlestringOptional
descriptionstringOptional
coverImageUrlstringOptional
courseIdsnumber[]Optional
teacherPortfolioStatestring · enumOptionalPossible values:
Responses
200

The teacher portfolio has been successfully updated.

application/json
patch
PATCH /v1/teacher-portfolios/{uuid} HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 1077

{
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "courseIds": [
    1
  ],
  "teacherPortfolioState": "draft",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "text",
          "userId": "text",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text"
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "text",
            "userId": "text",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text"
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      }
    ]
  }
}
{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "courseIds": [
    1
  ],
  "skills": [
    {
      "name": "text",
      "status": "not_completed",
      "mentionCount": 1
    }
  ],
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text",
              "status": "not_completed",
              "mentionCount": 1
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text",
                "status": "not_completed",
                "mentionCount": 1
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      }
    ]
  },
  "teacherPortfolioState": "draft"
}

Delete a teacher portfolio

delete
Path parameters
uuidstringRequired

Teacher Portfolio UUID

Responses
200

The teacher portfolio has been successfully deleted.

No content

delete
DELETE /v1/teacher-portfolios/{uuid} HTTP/1.1
Host: 
Accept: */*

No content

Get all teacher portfolios

get
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
200

The teacher portfolios are successfully retrieved.

application/json
get
GET /v1/teacher-portfolios HTTP/1.1
Host: 
Accept: */*
[
  {
    "itemType": "student_portfolio",
    "teacherPortfolio": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "teacherPortfolioState": "draft",
      "attachedCoursesCounter": 1,
      "learnerCounter": 1,
      "learnerGroupCounter": 1,
      "startedCounter": 1,
      "completedCounter": 1,
      "pendingReviewCounter": 1,
      "createdAt": "2025-10-13T22:01:39.903Z",
      "updatedAt": "2025-10-13T22:01:39.903Z",
      "coverImageUrl": "text"
    },
    "studentPortfolio": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "status": "not_started",
      "coverImageUrl": "text",
      "numberOfTotalRequirements": 1,
      "numberOfFailedEvidences": 1,
      "numberOfPendingEvidences": 1,
      "numberOfSubmittedEvidences": 1,
      "numberOfUnSubmittedEvidences": 1,
      "numberOfCompletedEvidences": 1,
      "createdAt": "2025-10-13T22:01:39.903Z",
      "updatedAt": "2025-10-13T22:01:39.903Z"
    },
    "showcasePortfolio": {
      "uuid": "text",
      "title": "text",
      "coverImageUrl": "text",
      "status": "DRAFT",
      "numberOfEvidences": 1,
      "createdAt": "2025-10-13T22:01:39.903Z",
      "updatedAt": "2025-10-13T22:01:39.903Z"
    }
  }
]

Create a new teacher portfolio

post
Body
titlestringOptional

The title of the teacher portfolio

descriptionstringOptional

The description of the teacher portfolio

coverImageUrlstringOptional
courseIdsnumber[]Required

Array of course IDs associated with the teacher portfolio

teacherPortfolioStatestring · enumOptional

The state of the teacher portfolio

Possible values:
Responses
201

The teacher portfolio has been successfully created.

application/json
post
POST /v1/teacher-portfolios HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 1205

{
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "courseIds": [
    1
  ],
  "teacherPortfolioState": "draft",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text"
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text"
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      }
    ]
  }
}
{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "courseIds": [
    1
  ],
  "skills": [
    {
      "name": "text",
      "status": "not_completed",
      "mentionCount": 1
    }
  ],
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "userId": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text",
              "status": "not_completed",
              "mentionCount": 1
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text",
                "status": "not_completed",
                "mentionCount": 1
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      }
    ]
  },
  "teacherPortfolioState": "draft"
}

Get courses linked to Teacher Portfolio

get
Authorizations
Path parameters
uuidstringRequired

Teacher Portfolio UUID

Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
200

The courses are successfully retrieved.

application/json
get
GET /v1/teacher-portfolios/{uuid}/courses HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
  {
    "id": 1,
    "courseCode": "text",
    "name": "text",
    "assignmentCount": 1,
    "membersCount": 1,
    "learnerGroupCount": 1,
    "termName": "text",
    "url": "text"
  }
]

Update courses linked to portfolio

patch
Authorizations
Path parameters
uuidstringRequired

Teacher Portfolio UUID

Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Body
titlestringOptional
descriptionstringOptional
coverImageUrlstringOptional
courseIdsnumber[]Optional
teacherPortfolioStatestring · enumOptionalPossible values:
Responses
200

The courses are successfully updated.

application/json
patch
PATCH /v1/teacher-portfolios/{uuid}/courses HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 1077

{
  "title": "text",
  "description": "text",
  "coverImageUrl": "text",
  "courseIds": [
    1
  ],
  "teacherPortfolioState": "draft",
  "sections": {
    "defaultSection": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "requirements": [
        {
          "uuid": "text",
          "userId": "text",
          "title": "text",
          "description": "text",
          "reflectionQuestions": [
            "text"
          ],
          "order": 1,
          "createdAt": "2025-10-13T22:01:39.903Z",
          "updatedAt": "2025-10-13T22:01:39.903Z",
          "skills": [
            {
              "name": "text"
            }
          ],
          "type": "project",
          "canvasAssignmentId": 1,
          "courseId": 1,
          "courseName": "text",
          "gradingType": "text",
          "htmlUrl": "text",
          "pointsPossible": 1,
          "submissionTypes": [
            "text"
          ]
        }
      ],
      "order": 1
    },
    "userSections": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "text",
            "userId": "text",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text"
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      }
    ]
  }
}
[
  {
    "id": 1,
    "courseCode": "text",
    "name": "text",
    "assignmentCount": 1,
    "membersCount": 1,
    "learnerGroupCount": 1,
    "termName": "text",
    "url": "text"
  }
]

Get dashboard for a teacher portfolio with optional filters

get
Path parameters
uuidstringRequired

Teacher Portfolio UUID

Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
sortBystringOptional

Sort by field (studentName, pendingEvidenceCount, status)

sortOrderstring · enumOptional

Sort order

Possible values:
searchstringOptional

Search query

courseIdsnumber[]Optional
Responses
200

Students retrieved successfully

application/json
get
GET /v1/teacher-portfolios/{uuid}/student-portfolios/summary HTTP/1.1
Host: 
Accept: */*
{
  "data": [
    {
      "studentPortfolioId": "123e4567-e89b-12d3-a456-426614174000",
      "studentName": "text",
      "studentAvatar": "text",
      "pendingEvidenceCount": 1,
      "status": "not_started"
    }
  ],
  "meta": {
    "total": 1,
    "page": 1,
    "lastPage": 1,
    "hasNextPage": true,
    "hasPreviousPage": true
  }
}

Get assignments linked to courses

get
Authorizations
Path parameters
uuidstringRequired

Teacher Portfolio UUID

Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
200

The assignments are successfully retrieved.

application/json
get
GET /v1/teacher-portfolios/{uuid}/courses/assignments HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
  {
    "id": 1,
    "userId": "text",
    "name": "text",
    "courseName": "text",
    "description": "text",
    "courseId": 1,
    "gradingType": "text",
    "htmlUrl": "text",
    "createdAt": "2025-10-13T22:01:39.903Z",
    "pointsPossible": 1,
    "submissionTypes": [
      "text"
    ]
  }
]
get
Authorizations
Responses
default
application/json
get
GET /v1/current-user HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
{
  "uuid": "text",
  "canvasClientId": "text",
  "personalIdentifiers": [
    "text"
  ],
  "roles": [
    "student"
  ],
  "canvasUserId": 1,
  "avatarUrl": "text",
  "name": "text",
  "canvasAccountId": 1
}

Get active courses

get

Retrieve a list of active courses for the user.

Authorizations
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
200

The courses are successfully retrieved.

application/json
get
GET /v1/canvas/courses HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200

The courses are successfully retrieved.

[
  {
    "id": 1,
    "courseCode": "text",
    "name": "text",
    "assignmentCount": 1,
    "membersCount": 1,
    "learnerGroupCount": 1,
    "termName": "text",
    "url": "text"
  }
]

Get graded submissions

get

Get graded submissions for the authenticated user. Note: This endpoint returns submissions for all courses the user is enrolled in.

Authorizations
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
courseIdnumberRequired
Responses
default
application/json
get
GET /v1/canvas/submissions?courseId=1 HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "id": 1,
    "assignmentId": 1,
    "assignment": {
      "id": 1,
      "userId": "text",
      "name": "text",
      "courseName": "text",
      "description": "text",
      "courseId": 1,
      "gradingType": "text",
      "htmlUrl": "text",
      "createdAt": "2025-10-13T22:01:39.903Z",
      "pointsPossible": 1,
      "submissionTypes": [
        "text"
      ]
    },
    "course": {
      "id": 1,
      "uuid": "text",
      "rootAccountId": 1,
      "accountId": 1,
      "name": "text",
      "membersCount": 1,
      "createdAt": "2025-10-13T22:01:39.903Z",
      "courseCode": "text",
      "startAt": "2025-10-13T22:01:39.903Z",
      "endAt": "2025-10-13T22:01:39.903Z",
      "termName": "text"
    },
    "grade": "text",
    "gradedAt": "2025-10-13T22:01:39.903Z",
    "score": 1,
    "htmlUrl": "text",
    "submissionType": "text",
    "body": "text",
    "url": "text"
  }
]

Get submission details for a specific student's assignment

get
Authorizations
Path parameters
courseIdnumberRequired
studentIdnumberRequired
assignmentIdnumberRequired
Responses
default
application/json
get
GET /v1/canvas/courses/{courseId}/students/{studentId}/assignments/{assignmentId}/submissions HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
{
  "assignmentId": 1,
  "assignmentName": "text",
  "assignmentDescription": "text",
  "courseId": 1,
  "courseName": "text",
  "htmlUrl": "text",
  "submissionType": "text",
  "submissionLink": "text",
  "body": "text",
  "pointsPossible": 1,
  "gradingType": "text",
  "score": 1,
  "commentCount": 1,
  "status": "unsubmitted",
  "createdAt": "2025-10-13T22:01:39.903Z"
}

Get all submission details for a specific user

get
Authorizations
Path parameters
canvasUserIdnumberRequired
Responses
default
application/json
get
GET /v1/canvas/users/{canvasUserId}/submissions HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "assignmentId": 1,
    "assignmentName": "text",
    "assignmentDescription": "text",
    "courseId": 1,
    "courseName": "text",
    "htmlUrl": "text",
    "submissionType": "text",
    "submissionLink": "text",
    "body": "text",
    "pointsPossible": 1,
    "gradingType": "text",
    "score": 1,
    "commentCount": 1,
    "status": "unsubmitted",
    "createdAt": "2025-10-13T22:01:39.903Z"
  }
]

Get Canvas groups

get

Retrieve a list of Canvas groups for the user.

Authorizations
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
default
application/json
get
GET /v1/canvas/groups HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "id": 201,
    "name": "Project Team Alpha",
    "description": "Team responsible for module 1.",
    "membersCount": 5,
    "contextType": "Course",
    "courseId": 101
  }
]

Get users by groupId

get
Authorizations
Path parameters
idnumberRequired
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
default
application/json
get
GET /v1/canvas/groups/{id}/users HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "canvasUserId": 1,
    "name": "text",
    "sortableName": "text",
    "email": "text",
    "avatarUrl": "text"
  }
]

Get users by courseId

get
Authorizations
Path parameters
idnumberRequired
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
default
application/json
get
GET /v1/canvas/courses/{id}/users HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "canvasUserId": 1,
    "name": "text",
    "sortableName": "text",
    "email": "text",
    "avatarUrl": "text"
  }
]

Get teammatesByStudentId

get
Authorizations
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
teammateCanvasIdsnumber[]Required

Canvas user ids of student teammates

Responses
default
application/json
get
GET /v1/canvas/teammates?teammateCanvasIds=1 HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "canvasUserId": 1,
    "name": "text",
    "email": "text",
    "avatarUrl": "text"
  }
]

Get groups by courseId

get
Authorizations
Path parameters
idnumberRequired
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
default
application/json
get
GET /v1/canvas/courses/{id}/groups HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "id": 201,
    "name": "Project Team Alpha",
    "description": "Team responsible for module 1.",
    "membersCount": 5,
    "contextType": "Course",
    "courseId": 101
  }
]

Get assignments by courseId

get
Authorizations
Path parameters
idnumberRequired
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
default
application/json
get
GET /v1/canvas/courses/{id}/assignments HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "id": 1,
    "userId": "text",
    "name": "text",
    "courseName": "text",
    "description": "text",
    "courseId": 1,
    "gradingType": "text",
    "htmlUrl": "text",
    "createdAt": "2025-10-13T22:01:39.903Z",
    "pointsPossible": 1,
    "submissionTypes": [
      "text"
    ]
  }
]

Get assignment by courseId and assignmentId

get
Authorizations
Path parameters
courseIdnumberRequired
assignmentIdnumberRequired
Query parameters
pagenumber · min: 1Optional

Page number (must be greater than 0)

Default: 1
pageSizenumber · min: 1 · max: 100Optional

Number of items per page (must be between 1 and 100)

Default: 20
Responses
default
application/json
get
GET /v1/canvas/courses/{courseId}/{assignmentId} HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
[
  {
    "id": 1,
    "userId": "text",
    "name": "text",
    "courseName": "text",
    "description": "text",
    "courseId": 1,
    "gradingType": "text",
    "htmlUrl": "text",
    "createdAt": "2025-10-13T22:01:39.903Z",
    "pointsPossible": 1,
    "submissionTypes": [
      "text"
    ]
  }
]

Get Canvas environment features

get
Authorizations
Responses
default
application/json
get
GET /v1/canvas/features/environment HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
{
  "sendUsageMetrics": true
}

Get all available badges for an issuer

get
Responses
200

List of available badges retrieved successfully

application/json
get
GET /v1/credentials/badges HTTP/1.1
Host: 
Accept: */*
[
  {
    "entityId": "SXcRrAd8QCWrmhRC9BODVA",
    "name": "Intro",
    "image": "https://api.test.badgr.com/public/badges/SXcRrAd8QCWrmhRC9BODVA/image",
    "skills": [
      {
        "name": "Tea Programming"
      },
      {
        "name": "A/B testing"
      }
    ]
  }
]

Upload a private file

post
Body
filestring · binaryOptional
Responses
201

The file has been successfully uploaded.

application/json
post
POST /v1/files/private HTTP/1.1
Host: 
Content-Type: multipart/form-data
Accept: */*
Content-Length: 17

{
  "file": "binary"
}
{
  "key": "text",
  "mimetype": "text",
  "size": 1,
  "originalname": "text"
}

Get a signed URL for a private file

get
Query parameters
keystringRequired

The key of the file in S3

Responses
200

Returns a signed URL for the file.

application/json
get
GET /v1/files/private?key=text HTTP/1.1
Host: 
Accept: */*
{
  "key": "text"
}

Upload a public file

post
Body
filestring · binaryOptional
Responses
201

The file has been successfully uploaded.

application/json
post
POST /v1/files/public HTTP/1.1
Host: 
Content-Type: multipart/form-data
Accept: */*
Content-Length: 17

{
  "file": "binary"
}
{
  "url": "text",
  "mimeType": "text",
  "fileSize": 1,
  "fileName": "text"
}

Get all portfolio previews

get

Retrieve a list of all portfolio previews (Teacher Portfolio, Student Portfolio, Showcase Portfolio)

Responses
200

The portfolios are successfully retrieved.

application/json
get
GET /v1/portfolio-dashboard HTTP/1.1
Host: 
Accept: */*
[
  {
    "itemType": "student_portfolio",
    "teacherPortfolio": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "teacherPortfolioState": "draft",
      "attachedCoursesCounter": 1,
      "learnerCounter": 1,
      "learnerGroupCounter": 1,
      "startedCounter": 1,
      "completedCounter": 1,
      "pendingReviewCounter": 1,
      "createdAt": "2025-10-13T22:01:39.903Z",
      "updatedAt": "2025-10-13T22:01:39.903Z",
      "coverImageUrl": "text"
    },
    "studentPortfolio": {
      "uuid": "123e4567-e89b-12d3-a456-426614174000",
      "title": "text",
      "status": "not_started",
      "coverImageUrl": "text",
      "numberOfTotalRequirements": 1,
      "numberOfFailedEvidences": 1,
      "numberOfPendingEvidences": 1,
      "numberOfSubmittedEvidences": 1,
      "numberOfUnSubmittedEvidences": 1,
      "numberOfCompletedEvidences": 1,
      "createdAt": "2025-10-13T22:01:39.903Z",
      "updatedAt": "2025-10-13T22:01:39.903Z"
    },
    "showcasePortfolio": {
      "uuid": "text",
      "title": "text",
      "coverImageUrl": "text",
      "status": "DRAFT",
      "numberOfEvidences": 1,
      "createdAt": "2025-10-13T22:01:39.903Z",
      "updatedAt": "2025-10-13T22:01:39.903Z"
    }
  }
]

Create a public shareable link for a resource.

post
Authorizations
Body
visibilitystring · enumRequired

The visibility setting for the shareable link.

Example: VISIBLE_WITH_LINKPossible values:
showcasePortfolioUuidstring · uuidOptional

The unique identifier (UUID) of the Showcase Portfolio to be shared.

Example: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
studentPortfolioUuidstring · uuidOptional

The unique identifier (UUID) of the Student Portfolio to be shared.

Example: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
showcaseEvidenceUuidstring · uuidOptional

The unique identifier (UUID) of the Showcase Evidence to be shared.

Example: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
studentEvidenceUuidstring · uuidOptional

The unique identifier (UUID) of the Student Evidence to be shared.

Example: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
typestring · enumRequired

The type setting for the shareable resource.

Possible values:
Responses
201

Successfully created or retrieved the shareable link.

application/json
post
POST /v1/share-links HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 310

{
  "visibility": "VISIBLE_WITH_LINK",
  "showcasePortfolioUuid": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
  "studentPortfolioUuid": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
  "showcaseEvidenceUuid": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
  "studentEvidenceUuid": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
  "type": "SHOWCASE_PORTFOLIO"
}
{
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "visibility": "VISIBLE_WITH_LINK",
  "shareLink": "text",
  "showcasePortfolioUuid": "text",
  "studentPortfolioUuid": "text",
  "showcaseEvidenceUuid": "text",
  "studentEvidenceUuid": "text"
}
get
Authorizations
Query parameters
resourceIdstring · uuidRequired

The unique identifier (UUID) of the resource.

resourceTypestring · enumRequired

The type of the resource.

Possible values:
Responses
200Success
application/json
get
GET /v1/share-links?resourceId=123e4567-e89b-12d3-a456-426614174000&resourceType=SHOWCASE_PORTFOLIO HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "visibility": "VISIBLE_WITH_LINK",
  "shareLink": "text",
  "showcasePortfolioUuid": "text",
  "studentPortfolioUuid": "text",
  "showcaseEvidenceUuid": "text",
  "studentEvidenceUuid": "text"
}
delete
Authorizations
Query parameters
resourceIdstring · uuidRequired

The unique identifier (UUID) of the resource.

resourceTypestring · enumRequired

The type of the resource.

Possible values:
Responses
200

All shared links for the specified resource have been successfully deleted.

No content

delete
DELETE /v1/share-links?resourceId=123e4567-e89b-12d3-a456-426614174000&resourceType=SHOWCASE_PORTFOLIO HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

get

Allows external users to view a read-only version of a shared resource without authentication.

Path parameters
linkTokenstringRequired

The unique token of the shareable link.

Example: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
Responses
200

Successfully retrieved the shared resource.

application/json
get
GET /v1/share-links/{linkToken}/shared-resource HTTP/1.1
Host: 
Accept: */*
{
  "showcasePortfolio": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "title": "text",
    "authorName": "text",
    "description": "text",
    "coverImageUrl": "text",
    "status": "DRAFT",
    "sections": {
      "defaultSection": {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "order": 1,
        "evidences": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "order": 1,
            "reflection": "text",
            "links": [
              "text"
            ],
            "attachments": [
              {
                "url": "text",
                "mimeType": "text",
                "fileSize": 1,
                "fileName": "text"
              }
            ],
            "tags": [
              "text"
            ],
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ],
            "assignmentSubmissionBody": "text"
          }
        ]
      },
      "userSections": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "order": 1,
          "evidences": [
            {
              "uuid": "123e4567-e89b-12d3-a456-426614174000",
              "userId": "123e4567-e89b-12d3-a456-426614174000",
              "title": "text",
              "description": "text",
              "order": 1,
              "reflection": "text",
              "links": [
                "text"
              ],
              "attachments": [
                {
                  "url": "text",
                  "mimeType": "text",
                  "fileSize": 1,
                  "fileName": "text"
                }
              ],
              "tags": [
                "text"
              ],
              "createdAt": "2025-10-13T22:01:39.903Z",
              "updatedAt": "2025-10-13T22:01:39.903Z",
              "type": "project",
              "canvasAssignmentId": 1,
              "courseId": 1,
              "courseName": "text",
              "gradingType": "text",
              "htmlUrl": "text",
              "pointsPossible": 1,
              "submissionTypes": [
                "text"
              ],
              "assignmentSubmissionBody": "text"
            }
          ]
        }
      ]
    },
    "tags": [
      "text"
    ],
    "assignmentSubmissionsCount": 1,
    "createdAt": "2025-10-13T22:01:39.903Z",
    "updatedAt": "2025-10-13T22:01:39.903Z"
  },
  "showcaseEvidence": {
    "uuid": "text",
    "title": "text",
    "description": "text",
    "reflection": "text",
    "links": [
      "text"
    ],
    "attachments": [
      {
        "url": "text",
        "mimeType": "text",
        "fileSize": 1,
        "fileName": "text"
      }
    ],
    "tags": [
      "text"
    ],
    "type": "project",
    "createdAt": "2025-10-13T22:01:39.903Z",
    "updatedAt": "2025-10-13T22:01:39.903Z",
    "showcasePortfolioTitle": "text"
  },
  "studentPortfolio": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "canvasStudentId": 1,
    "authorName": "text",
    "teacherPortfolioTitle": "text",
    "teacherPortfolioDescription": "text",
    "coverImageUrl": "text",
    "courseIds": [
      1
    ],
    "sections": {
      "defaultSection": {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "title": "text",
        "requirements": [
          {
            "uuid": "123e4567-e89b-12d3-a456-426614174000",
            "userId": "123e4567-e89b-12d3-a456-426614174000",
            "title": "text",
            "description": "text",
            "reflectionQuestions": [
              "text"
            ],
            "order": 1,
            "createdAt": "2025-10-13T22:01:39.903Z",
            "updatedAt": "2025-10-13T22:01:39.903Z",
            "skills": [
              {
                "name": "text",
                "status": "not_completed",
                "mentionCount": 1
              }
            ],
            "type": "project",
            "canvasAssignmentId": 1,
            "courseId": 1,
            "courseName": "text",
            "gradingType": "text",
            "htmlUrl": "text",
            "pointsPossible": 1,
            "submissionTypes": [
              "text"
            ]
          }
        ],
        "order": 1
      },
      "userSections": [
        {
          "uuid": "123e4567-e89b-12d3-a456-426614174000",
          "title": "text",
          "requirements": [
            {
              "uuid": "123e4567-e89b-12d3-a456-426614174000",
              "userId": "123e4567-e89b-12d3-a456-426614174000",
              "title": "text",
              "description": "text",
              "reflectionQuestions": [
                "text"
              ],
              "order": 1,
              "createdAt": "2025-10-13T22:01:39.903Z",
              "updatedAt": "2025-10-13T22:01:39.903Z",
              "skills": [
                {
                  "name": "text",
                  "status": "not_completed",
                  "mentionCount": 1
                }
              ],
              "type": "project",
              "canvasAssignmentId": 1,
              "courseId": 1,
              "courseName": "text",
              "gradingType": "text",
              "htmlUrl": "text",
              "pointsPossible": 1,
              "submissionTypes": [
                "text"
              ]
            }
          ],
          "order": 1
        }
      ]
    },
    "status": "not_started",
    "evidences": [
      {
        "uuid": "123e4567-e89b-12d3-a456-426614174000",
        "requirementId": "123e4567-e89b-12d3-a456-426614174000",
        "status": "not_submitted",
        "title": "text",
        "description": "text",
        "reflection": "text",
        "links": [
          "text"
        ],
        "attachments": [
          {
            "url": "text",
            "mimeType": "text",
            "fileSize": 1,
            "fileName": "text"
          }
        ],
        "skills": [
          {
            "name": "text",
            "status": "not_completed",
            "mentionCount": 1
          }
        ],
        "type": "project",
        "createdAt": "2025-10-13T22:01:39.903Z",
        "updatedAt": "2025-10-13T22:01:39.903Z",
        "teacherPortfolioTitle": "text"
      }
    ],
    "assignmentSubmissions": 1,
    "createdAt": "2025-10-13T22:01:39.903Z",
    "updatedAt": "2025-10-13T22:01:39.903Z",
    "skills": [
      {
        "name": "text",
        "status": "not_completed",
        "mentionCount": 1
      }
    ]
  },
  "studentPortfolioEvidence": {
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "requirementId": "123e4567-e89b-12d3-a456-426614174000",
    "status": "not_submitted",
    "title": "text",
    "description": "text",
    "reflection": "text",
    "links": [
      "text"
    ],
    "attachments": [
      {
        "url": "text",
        "mimeType": "text",
        "fileSize": 1,
        "fileName": "text"
      }
    ],
    "skills": [
      {
        "name": "text",
        "status": "not_completed",
        "mentionCount": 1
      }
    ],
    "type": "project",
    "createdAt": "2025-10-13T22:01:39.903Z",
    "updatedAt": "2025-10-13T22:01:39.903Z",
    "teacherPortfolioTitle": "text"
  },
  "type": "SHOWCASE_PORTFOLIO"
}

Export student portfolio as ZIP file

post
Path parameters
studentPortfolioIdstringRequired

UUID of the student portfolio to export

Body
pdfstring · binaryRequired

PDF file generated by the frontend

Responses
200

ZIP file containing student portfolio HTML, PDF, and media files

application/json
Responsestring · binary
post
POST /v1/export/studentPortfolio/{studentPortfolioId}/zip HTTP/1.1
Host: 
Content-Type: multipart/form-data
Accept: */*
Content-Length: 16

{
  "pdf": "binary"
}
200

ZIP file containing student portfolio HTML, PDF, and media files

binary

Export showcase portfolio as ZIP file

post
Path parameters
showcasePortfolioIdstringRequired

UUID of the showcase portfolio to export

Body
pdfstring · binaryRequired

PDF file generated by the frontend

Responses
200

ZIP file containing showcase portfolio HTML, PDF, and media files

application/json
Responsestring · binary
post
POST /v1/export/showcasePortfolio/{showcasePortfolioId}/zip HTTP/1.1
Host: 
Content-Type: multipart/form-data
Accept: */*
Content-Length: 16

{
  "pdf": "binary"
}
200

ZIP file containing showcase portfolio HTML, PDF, and media files

binary

Improve portfolio instructions using AI

post
Body
contentstring · max: 5000Required

The content to be improved (max 5000 characters). Supports both HTML and plain text input.

Example: <h3>Engineering Evidence: Prove Your Work</h3><p>In engineering, opinions don't count—only proof does...</p>
Responses
200

Instructions improved successfully

application/json
post
POST /v1/cedar/improve-portfolio-instructions HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 124

{
  "content": "<h3>Engineering Evidence: Prove Your Work</h3><p>In engineering, opinions don't count—only proof does...</p>"
}
{
  "instructions": "<div id=\"model-response-message-contentr_4971adac5bc2fd65\" class=\"markdown markdown-main-panel enable-updated-hr-color\" dir=\"ltr\"><h3>Improved Engineering Evidence: Prove Your Work</h3><p>This improved content provides clear, actionable guidance...</p></div>"
}

Improve evidence instructions using AI

post
Body
contentstring · max: 5000Required

The content to be improved (max 5000 characters). Supports both HTML and plain text input.

Example: <h3>Engineering Evidence: Prove Your Work</h3><p>In engineering, opinions don't count—only proof does...</p>
Responses
200

Instructions improved successfully

application/json
post
POST /v1/cedar/improve-evidence-instructions HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 124

{
  "content": "<h3>Engineering Evidence: Prove Your Work</h3><p>In engineering, opinions don't count—only proof does...</p>"
}
{
  "instructions": "<div id=\"model-response-message-contentr_4971adac5bc2fd65\" class=\"markdown markdown-main-panel enable-updated-hr-color\" dir=\"ltr\"><h3>Improved Engineering Evidence: Prove Your Work</h3><p>This improved content provides clear, actionable guidance...</p></div>"
}

Generate reflection questions using AI

post
Body
contentstring · max: 5000Required

The content to be used for question generation (max 5000 characters). Supports both HTML and plain text input.

Example: <h3>Engineering Evidence: Prove Your Work</h3><p>In engineering, opinions don't count—only proof does...</p>
Responses
200

Reflection questions generated successfully

application/json
post
POST /v1/cedar/generate-reflection-questions HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 124

{
  "content": "<h3>Engineering Evidence: Prove Your Work</h3><p>In engineering, opinions don't count—only proof does...</p>"
}
{
  "reflectionQuestions": [
    "What are the key challenges you faced during this project?",
    "How did you overcome obstacles to achieve your goals?",
    "What lessons did you learn that can be applied to future projects?"
  ]
}

Extract skills from instruction content using AI

post
Body
contentstring · max: 5000Required

The instruction content to analyze for skill extraction (max 5000 characters). Supports both HTML and plain text input.

Example: <h3>Web Development Project</h3><p>Students will build a full-stack web application using React, Node.js, and MongoDB. This project involves creating RESTful APIs, implementing user authentication, and deploying to the cloud.</p>
Responses
200

Skills extracted successfully

application/json
post
POST /v1/cedar/extract-skills HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 243

{
  "content": "<h3>Web Development Project</h3><p>Students will build a full-stack web application using React, Node.js, and MongoDB. This project involves creating RESTful APIs, implementing user authentication, and deploying to the cloud.</p>"
}
{
  "skills": [
    "React Development",
    "Node.js Backend Programming",
    "MongoDB Database Management",
    "REST API Development",
    "User Authentication Implementation",
    "Cloud Deployment",
    "Full-Stack Web Development"
  ]
}

Get feature flags status

get
Responses
200

Feature flags retrieved successfully

application/json
get
GET /v1/feature-flags HTTP/1.1
Host: 
Accept: */*
{
  "enableAiCedarEndpoints": true,
  "showNewDashboard": false
}

Last updated

Was this helpful?