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

# Cancelar Transação

> Cancele uma transação pendente antes de ser paga

## Visão Geral

Cancele uma transação que ainda não foi paga. Este endpoint só funciona para transações com status pendente (`pendingBoleto` ou `pendingPix`).

<Note>
  Para transações já pagas, use o endpoint de [Reembolso](/api-reference/transacoes/reembolsar).
</Note>

## Exemplo de Requisição

<CodeGroup>
  ```bash cURL theme={null}
  curl -X DELETE https://garu.com.br/api/transactions/12345 \
    -H "Authorization: Bearer sk_test_sua_chave_api"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://garu.com.br/api/transactions/12345',
    {
      method: 'DELETE',
      headers: {
        'Authorization': `Bearer ${process.env.GARU_API_KEY}`
      }
    }
  );

  const result = await response.json();
  console.log(result); // true
  ```

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

  url = "https://garu.com.br/api/transactions/12345"
  headers = {
      "Authorization": f"Bearer {os.environ['GARU_API_KEY']}"
  }

  response = requests.delete(url, headers=headers)
  result = response.json()
  print(result)  # True
  ```
</CodeGroup>

## Resposta de Sucesso (200 OK)

```json theme={null}
true
```

A resposta é `true` indicando que a transação foi cancelada com sucesso.

## Quando Usar

* Cliente desistiu da compra antes de pagar
* Boleto gerado por engano
* PIX não foi pago dentro do prazo esperado
* Transação duplicada

## Erros Comuns

<AccordionGroup>
  <Accordion title="400 - Transação não pode ser cancelada">
    ```json theme={null}
    {
      "statusCode": 400,
      "message": "Transaction cannot be cancelled"
    }
    ```

    **Solução:** Apenas transações pendentes podem ser canceladas. Se a transação já foi paga, use o [endpoint de reembolso](/api-reference/transacoes/reembolsar).
  </Accordion>

  <Accordion title="404 - Transação não encontrada">
    ```json theme={null}
    {
      "statusCode": 404,
      "message": "Transaction not found"
    }
    ```

    **Solução:** Verifique se o ID da transação está correto.
  </Accordion>
</AccordionGroup>

## Exemplo: Cancelar Transações Pendentes Antigas

```javascript theme={null}
async function cancelarTransacoesPendentesAntigas(diasAntigos = 7) {
  // Buscar transações pendentes
  const response = await fetch(
    'https://garu.com.br/api/transactions?status=pendingBoleto&limit=100',
    {
      headers: {
        'Authorization': `Bearer ${process.env.GARU_API_KEY}`
      }
    }
  );

  const { data: transacoes } = await response.json();
  const agora = new Date();
  const canceladas = [];

  for (const tx of transacoes) {
    const criacao = new Date(tx.createdAt);
    const diasPassados = (agora - criacao) / (1000 * 60 * 60 * 24);

    if (diasPassados > diasAntigos) {
      await fetch(
        `https://garu.com.br/api/transactions/${tx.id}`,
        {
          method: 'DELETE',
          headers: {
            'Authorization': `Bearer ${process.env.GARU_API_KEY}`
          }
        }
      );
      canceladas.push(tx.id);
    }
  }

  console.log(`${canceladas.length} transações canceladas`);
  return canceladas;
}
```

## Próximos Passos

<CardGroup cols={2}>
  <Card title="Reembolsar" icon="rotate-left" href="/api-reference/transacoes/reembolsar">
    Reembolse transações já pagas
  </Card>

  <Card title="Listar Transações" icon="list" href="/api-reference/transacoes/listar">
    Consulte todas as transações
  </Card>
</CardGroup>
