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

# Use o seu próprio stack

> Construa o site de área de membros com a tecnologia que preferir, chamando a API de membros diretamente.

O template é um ponto de partida, não uma exigência. Qualquer tecnologia que faça requisições HTTP consegue usar a API de membros: um site em React, Vue ou Svelte, um aplicativo móvel ou um site gerado no servidor. Este guia mostra o caminho completo, do login até concluir uma aula, e as regras que todo site precisa respeitar. Se um agente de IA vai construir por você, veja [Comece com a skill](https://ajuda.memberkit.com.br/headless/comece-com-a-skill.md).

## O básico

* **Endereço da API:** `https://memberkit.com.br/api/headless/v1`. É o mesmo para todas as áreas de membros.
* **Chave headless:** toda chamada leva o cabeçalho `X-Memberkit-Headless-Key`, que identifica a sua área de membros. Copie a chave no painel, em **Configurações > Acesso via API**. Ela é pública e pode ir no código do site. Se precisar de uma nova, peça ao suporte da Memberkit por e-mail e troque-a no site: a antiga para de funcionar na hora, mesmo para quem já está logado.
* **Autenticação:** depois do login, envie também o token do aluno, no cabeçalho `Authorization: Bearer <token>`.
* **CORS:** a API aceita chamadas de qualquer origem, direto do navegador. Ela não usa cookies.

## Do login à aula concluída

**1. Carregue a identidade visual**

A primeira chamada não precisa de login. Ela devolve o nome, o logotipo, as cores e os recursos ativados da área de membros, para a tela de login já aparecer com a marca certa.

```bash theme={null}
curl https://memberkit.com.br/api/headless/v1/academy \
  -H "X-Memberkit-Headless-Key: $HEADLESS_KEY"
```

**2. Faça o login**

```bash theme={null}
curl -X POST https://memberkit.com.br/api/headless/v1/auth/login \
  -H "X-Memberkit-Headless-Key: $HEADLESS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "aluno@exemplo.com", "password": "senha"}'
```

A resposta traz o token do aluno em `access_token`. Guarde-o: ele vale por duas semanas e vai em todas as outras chamadas, junto com a chave.

**3. Liste os cursos**

```bash theme={null}
curl https://memberkit.com.br/api/headless/v1/courses \
  -H "X-Memberkit-Headless-Key: $HEADLESS_KEY" \
  -H "Authorization: Bearer $TOKEN"
```

Cada curso diz se o aluno está matriculado (`enrolled`), o progresso dele e, para cursos que ele ainda não tem, o `checkout_url` para comprá-los. A lista é paginada; veja [Paginação](https://ajuda.memberkit.com.br/headless/referencia/introducao.md#listas-e-paginação).

**4. Abra um curso e uma aula**

`GET /courses/{id}` devolve os módulos e as aulas que o aluno pode ver, com o progresso, numa única chamada. `GET /lessons/{id}` devolve o conteúdo da aula, os materiais, as aulas vizinhas e o estado do aluno: concluída, avaliação, salva na lista.

Uma aula que ainda não foi liberada responde normalmente, mas sem conteúdo e com o campo `lock` preenchido, explicando o motivo e quando ela libera. Mostre a aula bloqueada com essa explicação em vez de escondê-la.

**5. Toque o vídeo**

`GET /lessons/{id}/playback` devolve o que o player precisa: a plataforma de vídeo (`source`), o identificador do vídeo, a URL do player assinada para o aluno (às vezes com marca d'água) e a posição de onde continuar (`start_time`).

**6. Registre o tempo assistido**

```bash theme={null}
curl -X POST https://memberkit.com.br/api/headless/v1/lessons/102/track \
  -H "X-Memberkit-Headless-Key: $HEADLESS_KEY" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"time": 312}'
```

Envie a posição em segundos quando o aluno sai da aula: ao fechar ou esconder a aba e ao navegar para outra tela. É com isso que a MemberKit sabe onde o aluno parou, mostra o "continuar assistindo" e retoma o vídeo do ponto certo.

**7. Conclua a aula**

```bash theme={null}
curl -X POST https://memberkit.com.br/api/headless/v1/lessons/102/complete \
  -H "X-Memberkit-Headless-Key: $HEADLESS_KEY" \
  -H "Authorization: Bearer $TOKEN"
```

A resposta traz o progresso atualizado do curso. A conclusão alimenta o progresso, os certificados e o ranking.

## Regras que todo site precisa respeitar

> [accordion] Uma sessão por aluno
>
> Cada aluno tem uma sessão ativa por vez. Entrar em outro dispositivo, no seu site ou na área de membros hospedada, encerra a sessão anterior: o token antigo passa a responder `session_replaced`. Trocar ou redefinir a senha encerra todos os tokens, e sair (`POST /auth/logout`) encerra apenas o token daquele dispositivo. Quando receber um desses erros, apague o token e leve o aluno para o login. Donos e administradores são exceção e podem ter várias sessões.

> [accordion] Onboarding antes do conteúdo
>
> A área de membros e cada curso podem exigir que o aluno aceite um texto antes de continuar. Enquanto ele não aceitar, as chamadas respondem `onboarding_required` ou `course_onboarding_required`. Mostre o texto (`GET /onboarding` ou `GET /courses/{id}/onboarding`) e envie o aceite.

> [accordion] Bloqueios e acesso expirado
>
> Aulas liberadas ao longo do tempo chegam com `lock`. Um acesso vencido responde `access_expired`, e um vídeo bloqueado responde `content_locked`. Mostre o motivo; não esconda o conteúdo.

> [accordion] Assinatura da área de membros suspensa
>
> `subscription_suspended` (402) significa que a assinatura do produtor na MemberKit venceu, não o acesso do aluno. Mostre uma tela de manutenção, não a de login.

> [accordion] Envios repetidos
>
> Formulários que criam algo, como comentários e mensagens de contato, devem enviar o cabeçalho `Idempotency-Key` com um valor único por envio. Se o aluno clicar duas vezes ou a conexão cair, a repetição devolve a primeira resposta em vez de duplicar o comentário.

> [accordion] Textos que chegam em HTML
>
> O conteúdo das aulas, o texto do onboarding, as publicações da comunidade e os textos dos quizzes chegam como HTML já renderizado. Os comentários chegam como texto simples e devem ser escapados. As respostas do Assistente de IA chegam em Markdown.

> [accordion] Nada de iframe ou webview da área hospedada
>
> A área de membros hospedada só aceita ser aberta na própria origem, então o navegador bloqueia o `iframe`. Numa webview ela abre, mas entrar nela encerra a sessão do aluno no seu aplicativo, e a App Store e o Google Play rejeitam aplicativos que só empacotam um site. Construa as telas com a API.

> [accordion] Segurança do token
>
> O token do aluno dá acesso à conta dele. Em um site no navegador, qualquer script da página consegue lê-lo, então não adicione scripts de terceiros em que você não confie e nunca renderize HTML digitado por usuários. Nunca coloque a chave da [API de operador](https://ajuda.memberkit.com.br/referencia-api/introducao.md) no site: ela controla a área de membros inteira.

## Login a partir do seu sistema

Se o aluno já está logado no seu sistema, você pode levá-lo direto para o site sem pedir a senha: o seu servidor gera um token de login na API de operador e o site o troca por um token de aluno em `POST /auth/exchange`. O passo a passo, com exemplos em Node.js, PHP e Ruby, está em [Login a partir do seu sistema](https://ajuda.memberkit.com.br/headless/login-a-partir-do-seu-sistema.md).

## Próximos passos

Todas as chamadas, com parâmetros, respostas e erros, estão na [Referência da API de membros](https://ajuda.memberkit.com.br/headless/referencia/introducao.md). O código do [template](https://ajuda.memberkit.com.br/headless/comece-com-um-agente.md) também serve de exemplo de cada tela.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.