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

# Delete a Product

> Remove ou desativa um produto.

Remove um `product` quando ele nunca foi usado. Se o produto já estiver
referenciado por histórico financeiro, checkout ou assinatura, a Chargefy
desativa o produto automaticamente com `is_active=false` e retorna o objeto
completo atualizado em vez do shape curto de remoção.

## Delete ou arquivamento: como decidimos

Você sempre chama a mesma rota, e a Chargefy escolhe o caminho seguro por você:

* **Nunca foi usado** → o produto é removido de verdade. A resposta traz
  `deleted: true`.
* **Já teve venda, checkout ou assinatura** → o produto é **arquivado**
  (`is_active=false`) em vez de apagado. A resposta traz o objeto completo
  com `is_active: false`.

Fazemos assim para **nunca quebrar o histórico**. Uma venda antiga precisa
continuar apontando para o produto que foi vendido; se apagássemos o produto,
relatórios, recibos e faturas ficariam órfãos. Arquivar tira o produto de novas
vendas sem mexer em nada que já aconteceu.

<Tip>
  Para saber o que aconteceu, olhe a resposta: se vier `deleted: true`, o
  produto saiu de vez; se vier o objeto completo com `is_active: false`, ele foi
  arquivado e o histórico está preservado.
</Tip>

## Autenticação

A API key da própria organização atua diretamente. A API key de plataforma exige o
header `Organization: <organization_id>` apontando para uma organização
conectada ativa.

## Parâmetros de caminho

<ParamField path="id" type="string" required>
  ID do produto (`prod_*`).
</ParamField>

<RequestExample>
  ```bash cURL theme={}
  curl -X DELETE "https://api.chargefy.io/v1/products/prod_123" \
    -H "Authorization: Bearer {{API_KEY}}"
  ```
</RequestExample>

## Resposta

`200 OK` com um destes dois shapes:

**Quando a row pôde ser removida** — objeto curto de remoção:

| Campo     | Tipo      | Observação             |
| --------- | --------- | ---------------------- |
| `id`      | `string`  | ID do produto removido |
| `object`  | `string`  | Sempre `"product"`     |
| `deleted` | `boolean` | Sempre `true`          |

<ResponseExample>
  ```json 200 (deleted) theme={}
  {
    "id": "prod_123",
    "object": "product",
    "deleted": true
  }
  ```

  ```json 200 (deactivated) theme={}
  {
    "id": "prod_123",
    "object": "product",
    "created_at": "2026-05-16T14:09:27Z",
    "default_price": "price_123",
    "description": "Acesso completo",
    "image_url": null,
    "is_active": false,
    "is_tax_applicable": true,
    "livemode": true,
    "metadata": {},
    "name": "Plano Pro",
    "prices": [],
    "updated_at": "2026-05-16T15:02:10Z"
  }
  ```
</ResponseExample>

**Quando o produto precisava permanecer auditável** — mesmo shape de
[`GET /v1/products/:id`](/api-reference/products/get#resposta) com
`is_active=false`.

## Erros comuns

| Status | `code`             | Quando ocorre                        |
| ------ | ------------------ | ------------------------------------ |
| `404`  | `resource_missing` | Produto não existe nesta organização |

## Webhook

Quando o produto é desativado em vez de removido, dispara
[`product.updated`](/api-reference/webhooks/product.updated) com
`previous_attributes.is_active = true`.
