> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dokstamp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Portfólio do Estudante

> Permita que estudantes curem uma página de portfólio público exibindo suas credenciais.

# Portfólio do Estudante

Cada estudante pode ter uma página de portfólio público — uma exibição curada de seus certificados conquistados, acessível via uma URL única. As instituições gerenciam a página em nome dos estudantes por meio da API.

***

## Formato da URL da página de portfólio

As páginas de portfólio são acessíveis publicamente em:

```
https://portfolio.dokstamp.eu/{slug}
```

Por exemplo: `https://portfolio.dokstamp.eu/maria-fernanda-silva`

***

## Criar uma página de portfólio

```bash theme={null}
curl -X POST "https://api.dokstamp.com/students/{student_uuid}/pages" \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "X-Tenant: {TENANT}" \
  -d '{
    "slug": "maria-fernanda-silva",
    "is_public": true,
    "bio": "Formada em Ciência da Computação com foco em sistemas distribuídos e aprendizado de máquina."
  }'
```

O `slug` deve ser amigável para URL (letras minúsculas, números, hífens) e único na plataforma.

***

## Adicionar certificados ao portfólio

Após emitir os certificados, adicione-os à página de portfólio do estudante:

```bash theme={null}
curl -X POST "https://api.dokstamp.com/students/{student_uuid}/pages/{page_uuid}/items" \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "X-Tenant: {TENANT}" \
  -d '{
    "certificate_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "sort_order": 1,
    "is_visible": true
  }'
```

***

## Reordenar itens do portfólio

```bash theme={null}
# Atualizar sort_order para reposicionar um item
curl -X PATCH "https://api.dokstamp.com/students/{student_uuid}/pages/{page_uuid}/items/{item_uuid}" \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "X-Tenant: {TENANT}" \
  -d '{ "sort_order": 2 }'
```

***

## Ocultar um certificado da visualização pública

Mantenha o item no portfólio, mas torne-o invisível para visitantes públicos:

```bash theme={null}
curl -X PATCH "https://api.dokstamp.com/students/{student_uuid}/pages/{page_uuid}/items/{item_uuid}" \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "X-Tenant: {TENANT}" \
  -d '{ "is_visible": false }'
```

***

## Tornar a página privada

Uma página privada não é acessível publicamente. Útil enquanto adiciona certificados antes de publicar:

```bash theme={null}
curl -X PATCH "https://api.dokstamp.com/students/{student_uuid}/pages/{page_uuid}" \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "X-Tenant: {TENANT}" \
  -d '{ "is_public": false }'
```

***

## Exemplo completo — fluxo para novo formando

```javascript JavaScript theme={null}
async function onboardarNovoFormando(student, certificate) {
  // 1. Criar a página de portfólio
  const pageRes = await api.post(`/students/${student.uuid}/pages`, {
    slug: slugify(`${student.name}-${Date.now()}`),
    is_public: false, // começar como privada
    bio: `${student.name} se formou em ${certificate.course.name}.`,
  });
  const page = pageRes.data;

  // 2. Adicionar o certificado
  await api.post(`/students/${student.uuid}/pages/${page.uuid}/items`, {
    certificate_uuid: certificate.uuid,
    sort_order: 1,
    is_visible: true,
  });

  // 3. Publicar a página
  await api.patch(`/students/${student.uuid}/pages/${page.uuid}`, {
    is_public: true,
  });

  return `https://portfolio.dokstamp.eu/${page.slug}`;
}
```

***

## Regras de privacidade do portfólio

| `is_public` | `is_visible` (item) | Resultado                              |
| ----------- | ------------------- | -------------------------------------- |
| `true`      | `true`              | Certificado visível na página pública  |
| `true`      | `false`             | Página pública, mas certificado oculto |
| `false`     | qualquer            | Página inteira é privada               |
