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

# Deletar Afiliado

> Remova um afiliado e todos os seus dados associados

## Endpoint

```
DELETE https://api.affiliatus.io/v1/affiliates/{id}
```

Este endpoint remove permanentemente um afiliado da campanha e **todos os seus dados associados**.

<Warning>
  **Ação Irreversível:** Esta operação é permanente e não pode ser desfeita. Todos os dados do afiliado, incluindo conversões, eventos e relacionamentos, serão deletados.

  **Alternativa Recomendada:** Considere desativar o afiliado (`status: inactive`) ao invés de deletá-lo para preservar o histórico.
</Warning>

***

## Autenticação

<ParamField header="X-API-Key" type="string" required>
  Sua API key obtida no dashboard em Configurações → API Keys
</ParamField>

***

## Path Parameters

<ParamField path="id" type="number" required>
  ID do afiliado que você deseja deletar
</ParamField>

***

## Response

<ResponseField name="success" type="boolean">
  Indica se a operação foi bem-sucedida
</ResponseField>

<ResponseField name="message" type="string">
  Mensagem de confirmação
</ResponseField>

***

## Exemplos

### Deletar Afiliado

<CodeGroup>
  ```bash cURL theme={null}
  curl -X DELETE "https://api.affiliatus.io/v1/affiliates/123" \
    -H "X-API-Key: sua_api_key_aqui"
  ```

  ```javascript Node.js theme={null}
  const affiliateId = 123;

  const response = await fetch(
    `https://api.affiliatus.io/v1/affiliates/${affiliateId}`,
    {
      method: 'DELETE',
      headers: {
        'X-API-Key': process.env.AFFILIATUS_API_KEY,
      }
    }
  );

  const result = await response.json();
  console.log(result.message); // "Affiliate deleted successfully"
  ```

  ```python Python theme={null}
  import requests

  affiliate_id = 123

  response = requests.delete(
      f'https://api.affiliatus.io/v1/affiliates/{affiliate_id}',
      headers={
          'X-API-Key': 'sua_api_key_aqui',
      }
  )

  result = response.json()
  print(result['message'])  # "Affiliate deleted successfully"
  ```

  ```php PHP theme={null}
  <?php
  $affiliateId = 123;
  $ch = curl_init("https://api.affiliatus.io/v1/affiliates/{$affiliateId}");

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'X-API-Key: sua_api_key_aqui'
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  $result = json_decode($response, true);
  echo $result['message']; // "Affiliate deleted successfully"
  ```
</CodeGroup>

### Resposta de Sucesso (200 OK)

```json theme={null}
{
  "success": true,
  "message": "Affiliate deleted successfully"
}
```

***

## O Que é Deletado?

Quando você deleta um afiliado, os seguintes dados são **permanentemente removidos**:

<AccordionGroup>
  <Accordion title="Dados do Afiliado">
    * Informações pessoais (nome, e-mail, telefone)
    * Credenciais de acesso
    * Código de referência (referralId)
    * Status e data de criação
  </Accordion>

  <Accordion title="Relacionamentos">
    * Vínculo com a campanha (AffiliateCampaign)
    * Associação de cupons (se houver)
  </Accordion>

  <Accordion title="Eventos de Rastreamento">
    * Page views
    * Leads
    * Eventos de conversão
  </Accordion>

  <Accordion title="Conversões">
    * Todas as conversões geradas
    * Histórico de comissões
    * Relacionamentos com payouts
  </Accordion>

  <Accordion title="Payouts">
    * Histórico de pagamentos
    * Registros de transações
  </Accordion>
</AccordionGroup>

<Note>
  **Deleção em Cascata:** O banco de dados está configurado com `CASCADE DELETE`, garantindo que todos os registros relacionados sejam removidos automaticamente e evitando dados órfãos.
</Note>

***

## Erros

### 401 - API Key Inválida

```json theme={null}
{
  "statusCode": 401,
  "message": "Invalid or inactive API Key",
  "error": "Unauthorized"
}
```

**Solução:** Verifique se o header `X-API-Key` está correto e se a chave está ativa.

***

### 404 - Afiliado Não Encontrado

```json theme={null}
{
  "statusCode": 404,
  "message": "Affiliate not found",
  "error": "Not Found"
}
```

**Causas possíveis:**

* O ID do afiliado não existe
* O afiliado não está associado à campanha da sua API Key
* O afiliado já foi deletado

**Solução:** Verifique se o ID está correto e se o afiliado pertence à sua campanha.

<Note>
  **Segurança:** A API não revela se um afiliado existe em outra campanha.
</Note>

***

### 400 - ID Inválido

```json theme={null}
{
  "statusCode": 400,
  "message": "Validation failed (numeric string is expected)",
  "error": "Bad Request"
}
```

**Solução:** O ID deve ser um número inteiro válido.

***

### 429 - Rate Limit

```json theme={null}
{
  "statusCode": 429,
  "message": "ThrottlerException: Too Many Requests",
  "error": "Too Many Requests"
}
```

**Solução:** Aguarde 60 segundos antes de tentar novamente.

***

## Alternativa: Desativar ao Invés de Deletar

Na maioria dos casos, é **recomendado desativar** o afiliado ao invés de deletá-lo:

### Vantagens de Desativar

<AccordionGroup>
  <Accordion title="Preserva histórico">
    Mantém todas as conversões e comissões para relatórios e auditoria.
  </Accordion>

  <Accordion title="Reversível">
    Você pode reativar o afiliado no futuro se necessário.
  </Accordion>

  <Accordion title="Compliance">
    Facilita compliance e auditorias mantendo registros históricos.
  </Accordion>

  <Accordion title="Analytics">
    Permite análises de longo prazo sem perder dados.
  </Accordion>
</AccordionGroup>

### Como Desativar

Use o endpoint de atualização para mudar o status:

```bash theme={null}
curl -X PATCH "https://api.affiliatus.io/v1/affiliates/123" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sua_api_key_aqui" \
  -d '{"status": "inactive"}'
```

<Info>
  Afiliados com status `inactive` não podem gerar novas conversões, mas mantêm todo o histórico intacto.
</Info>

***

## Quando Usar DELETE

Use a deleção permanente apenas quando:

<AccordionGroup>
  <Accordion title="Afiliado criado por engano">
    Se o afiliado foi criado acidentalmente e nunca gerou conversões.
  </Accordion>

  <Accordion title="Teste/desenvolvimento">
    Para limpar dados de teste durante desenvolvimento.
  </Accordion>

  <Accordion title="Solicitação de LGPD/GDPR">
    Quando o afiliado solicitar formalmente a remoção completa de seus dados.
  </Accordion>

  <Accordion title="Fraude confirmada">
    Em casos de fraude comprovada onde os registros devem ser eliminados.
  </Accordion>
</AccordionGroup>

***

## Exemplo: Confirmação Antes de Deletar

É uma boa prática consultar o afiliado antes de deletá-lo:

```javascript theme={null}
async function deleteAffiliateWithConfirmation(affiliateId) {
  // 1. Consultar o afiliado
  const getResponse = await fetch(
    `https://api.affiliatus.io/v1/affiliates/${affiliateId}`,
    {
      headers: { 'X-API-Key': process.env.AFFILIATUS_API_KEY }
    }
  );
  
  const affiliate = await getResponse.json();
  
  // 2. Verificar se tem conversões
  if (affiliate.totalConversions > 0) {
    console.warn(
      `⚠️ Afiliado ${affiliate.name} tem ${affiliate.totalConversions} conversões.`
    );
    console.warn('Considere desativar ao invés de deletar.');
    return;
  }
  
  // 3. Confirmar deleção
  console.log(`Deletando afiliado ${affiliate.name}...`);
  
  const deleteResponse = await fetch(
    `https://api.affiliatus.io/v1/affiliates/${affiliateId}`,
    {
      method: 'DELETE',
      headers: { 'X-API-Key': process.env.AFFILIATUS_API_KEY }
    }
  );
  
  const result = await deleteResponse.json();
  console.log('✅', result.message);
}

// Usar
deleteAffiliateWithConfirmation(123);
```

***

## Próximos Passos

<CardGroup cols={2}>
  <Card title="Listar Afiliados" icon="list" href="/api-reference/affiliates/list-affiliates">
    Veja todos os afiliados restantes
  </Card>

  <Card title="Criar Afiliado" icon="plus" href="/api-reference/affiliates/create-affiliate">
    Adicione um novo afiliado
  </Card>

  <Card title="Atualizar Status" icon="toggle-on" href="/api-reference/affiliates/update-affiliate">
    Desative ao invés de deletar
  </Card>

  <Card title="Dashboard" icon="chart-line" href="https://app.affiliatus.io">
    Gerencie via dashboard
  </Card>
</CardGroup>
