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

# GitHub Entitlement

> Conceda aos clientes acesso de colaborador a um repositório privado do GitHub no nível de permissão que você escolher, e revogue automaticamente em caso de cancelamento.

<Info>
  O GitHub entitlement adiciona um cliente pagante como colaborador em um repositório privado. Você escolhe o nível de permissão (`pull`, `push`, `triage`, `maintain`, ou `admin`) e o Dodo Payments gerencia o convite, rastreamento de aceitação e remoção em caso de cancelamento.
</Info>

## O que é entregue

* O cliente é convidado ao seu repositório do GitHub por meio de um fluxo OAuth que vincula a conta do GitHub à compra.
* Uma vez aceito, o GitHub concede a eles acesso de colaborador no nível de permissão configurado.
* Cancelamento, reembolso ou revogação manual removem o colaborador.

Usos comuns incluem produtos com código disponível, modelos pagos, repositórios de código de cursos e SDKs exclusivos para clientes.

## Conectar GitHub

<Steps>
  <Step title="Open Entitlements">
    No seu painel do Dodo Payments, vá para **Entitlements** e clique em **+** para começar um novo entitlement.
  </Step>

  <Step title="Pick GitHub">
    Escolha **Acesso ao GitHub** como a integração. Se o GitHub ainda não estiver conectado, você será solicitado a **Conectar GitHub**.

    <Frame caption="Connect GitHub prompt before the install handoff.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/connect-prompt.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=8a836c94099accdb2b3dc31c22d0e11b" alt="Novo painel de entitlement solicitando ao comerciante para conectar o GitHub" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1129" data-path="images/entitlements/github/connect-prompt.png" />
    </Frame>

    Ao clicar, abre o GitHub em uma nova aba. Faça login, então instale o Dodo Payments GitHub App na organização ou conta de usuário que possui o repositório. Você pode conceder acesso a **todos os repositórios** ou apenas aos que pretende restringir.

    <Frame caption="GitHub Install & Authorize page — choose which repositories the app can manage.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/oauth-install.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=0788d3f6e9df8a087de824967f09c215" alt="Página de Instalação e Autorização do GitHub com opções para Todos os repositórios e Apenas repositórios selecionados" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1120" data-path="images/entitlements/github/oauth-install.png" />
    </Frame>

    Quando o GitHub redirecionar de volta, você verá uma confirmação de que a conta está conectada.

    <Frame caption="Account connected — return to the Dodo Payments dashboard to continue.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/connected.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=ee3c87c3b3917f473ff3d376dfdc6494" alt="Página de confirmação de conexão bem-sucedida do Acesso ao GitHub" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1137" data-path="images/entitlements/github/connected.png" />
    </Frame>
  </Step>

  <Step title="Pick a repository and permission">
    De volta ao painel, escolha o **repositório** que o entitlement deve conceder acesso e selecione o nível de **permissão**. O seletor de repositórios apenas mostra os repositórios que o GitHub App tem acesso. Dê um **nome** ao entitlement e clique em **Criar Entitlement**.

    <Frame caption="Creating a GitHub entitlement. Pick the repository and the permission you want customers to receive.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=722e925ec5158a5d16c58213132ccb9d" alt="Formulário de entitlement do GitHub com Acesso ao GitHub conectado, seletor de repositório, dropdown de permissão e campo de nome" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1130" data-path="images/entitlements/github/create.png" />
    </Frame>
  </Step>

  <Step title="Save the entitlement">
    Salve e anexe o entitlement a qualquer produto. Clientes que comprarem esse produto recebem um convite do GitHub na entrega.
  </Step>
</Steps>

## Níveis de permissão

As permissões padrão do repositório GitHub se aplicam:

| Permissão  | Melhor para                                                                                    |
| ---------- | ---------------------------------------------------------------------------------------------- |
| `pull`     | Acesso somente leitura. Os clientes podem clonar, buscar e visualizar o repositório.           |
| `triage`   | Acesso de leitura mais a possibilidade de gerenciar problemas e pull requests.                 |
| `push`     | Acesso de leitura + escrita. Os clientes podem enviar branches e abrir pull requests.          |
| `maintain` | Acesso para enviar mais o gerenciamento de configurações do repositório (exceto as sensíveis). |
| `admin`    | Controle total do repositório. Use com cautela.                                                |

<Warning>
  Conceda o **mínimo privilégio** que atenda ao seu caso de uso. A maioria dos cenários de conteúdo pago só precisa de `pull`.
</Warning>

## Fluxo do cliente

1. O cliente conclui o checkout.
2. O Dodo Payments cria uma concessão em status `pending` com um `oauth_url` para o cliente vincular sua conta do GitHub.
3. O cliente autoriza através do link no e-mail ou portal do cliente.
4. O Dodo Payments convida a conta do GitHub do cliente para o repositório na permissão configurada. A concessão muda para `delivered` assim que o convite é criado.
5. Se a assinatura for cancelada, reembolsada ou revogada, o cliente é removido como colaborador.

## Configuração necessária

| Campo        | Obrigatório | Descrição                                                                                          |
| ------------ | ----------- | -------------------------------------------------------------------------------------------------- |
| `target_id`  | Sim         | O repositório para convidar o cliente. O seletor de repositório do painel preenche isso para você. |
| `permission` | Sim         | Um dos `pull`, `push`, `triage`, `maintain`, `admin`.                                              |

## Criar via API

<CodeGroup>
  ```typescript TypeScript theme={null} theme={null}
  const entitlement = await client.entitlements.create({
    name: 'Code Share Repository',
    integration_type: 'github',
    integration_config: {
      target_id: 'acme/private-sdk',
      permission: 'pull',
    },
  });
  ```

  ```python Python theme={null} theme={null}
  client.entitlements.create(
      name="Code Share Repository",
      integration_type="github",
      integration_config={
          "target_id": "acme/private-sdk",
          "permission": "pull",
      },
  )
  ```

  ```go Go theme={null} theme={null}
  client.Entitlements.New(ctx, dodopayments.EntitlementNewParams{
    Name:            dodopayments.F("Code Share Repository"),
    IntegrationType: dodopayments.F(dodopayments.EntitlementIntegrationTypeGithub),
    IntegrationConfig: dodopayments.F[dodopayments.IntegrationConfigUnionParam](
      dodopayments.IntegrationConfigGitHubConfigParam{
        TargetID:   dodopayments.F("acme/private-sdk"),
        Permission: dodopayments.F("pull"),
      },
    ),
  })
  ```
</CodeGroup>

## Webhooks

Os eventos padrão de [webhooks `entitlement_grant.*`](/developer-resources/webhooks/intents/entitlement-grant) cobrem o fluxo do GitHub:

* `entitlement_grant.created` inclui o `oauth_url` para a autorização do GitHub.
* `entitlement_grant.delivered` dispara uma vez que o convite de colaborador é criado.
* `entitlement_grant.failed` dispara com `error_code: "github_permission_denied"` (ou similar) se o GitHub App perder o acesso ao repositório.

## Solução de problemas

<AccordionGroup>
  <Accordion title="Repository picker is empty">
    O Dodo Payments GitHub App deve estar instalado na organização ou usuário que possui o repositório. Abra **Entitlements → Integrações → GitHub** e reinstale o app, garantindo acesso aos repositórios relevantes.
  </Accordion>

  <Accordion title="Grant fails with permission_denied">
    A instalação do GitHub App não tem mais acesso ao repositório, ou o repositório foi renomeado/transferido. Re-conceda acesso ao app e a próxima concessão será bem-sucedida.
  </Accordion>

  <Accordion title="Customer hasn't accepted the invite">
    Os clientes devem aceitar o convite do GitHub na página de notificações ou clicando no link em seu e-mail. Até que aceitem, permanecem "convidados" mas não podem clonar o repositório. A concessão ainda é `delivered` na perspectiva do Dodo Payments; o convite é o que emitimos.
  </Accordion>
</AccordionGroup>
