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

# Liberar acesso depois da venda

> Dê acesso ao comprador assim que o pagamento for aprovado, na área de membros da Ephra ou na sua própria plataforma.

O caminho depende de onde o conteúdo está.

> [tab] Área de membros da Ephra
>
> **Não precisa de código.** Com o produto entregando pela área de membros da Ephra (`deliveryType: "ephraMembers"`), quando a venda é aprovada a Ephra matricula o comprador no produto e manda o e-mail de acesso.
>
> Use a API só para casos fora da venda:
>
> * Dar acesso de cortesia: `POST /v1/products/{productId}/member-enrollments` com `{"email": "aluno@exemplo.com", "name": "Ana"}`.
> * Tirar o acesso de cortesia: `DELETE /v1/products/{productId}/member-enrollments/{enrollmentId}`. Só remove matrícula manual; acesso de compra continua.
> * Ver quem tem acesso: `GET /v1/products/{productId}/member-enrollments`.
>
> Veja o [guia da área de membros](https://docs.ephra.io/guias/area-de-membros.md).

> [tab] Sua plataforma
>
> Assine o evento [`release_access`](https://docs.ephra.io/webhooks/eventos/acesso). Ele chega quando a venda é aprovada, já no formato de área de membros.
>
> ```javascript theme={"system"}
> app.post("/webhooks/ephra", async (req, res) => {
>   const body = req.body;
>   if (body.scope === "test") return res.sendStatus(200);
>   if (body.type !== "customer.member_added") return res.sendStatus(200);
>
>   const { product, lastInvoice } = body.event;
>   const jaLiberado = await acessos.existe(lastInvoice.id);
>   if (!jaLiberado) {
>     await alunos.liberar({
>       email: lastInvoice.customer.email,
>       nome: lastInvoice.customer.name,
>       produtoId: product.id,
>       vendaId: lastInvoice.id,
>     });
>   }
>   res.sendStatus(200);
> });
> ```
>
> > [!TIP]
> >
> > Responda `200` rápido e faça o trabalho pesado numa fila. Se o seu endpoint demorar ou falhar, a Ephra tenta de novo, e o `lastInvoice.id` evita liberar duas vezes.

## Tirar o acesso no reembolso

Assine também `transaction_refunded`. Quando ele chegar, use `transaction.id` para achar o acesso que você liberou e remova.


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