Skip to main content
curl -X POST "https://api.chargefy.io/v1/products/prod_123" \
  -H "Authorization: Bearer {{API_KEY}}" \
  -H "Content-Type: application/json" \
  -d '{
    "default_price_id": "price_456",
    "name": "Plano Pro Plus"
  }'
{
  "id": "prod_123",
  "object": "product",
  "created_at": "2026-05-16T14:09:27Z",
  "default_price": "price_456",
  "description": "Acesso completo",
  "image_url": null,
  "is_active": true,
  "is_tax_applicable": true,
  "livemode": true,
  "metadata": {
    "reference_id": "sku_pro"
  },
  "name": "Plano Pro Plus",
  "prices": [
    {
      "id": "price_456",
      "object": "price",
      "created_at": "2026-05-16T14:30:00Z",
      "currency": "brl",
      "is_active": true,
      "livemode": true,
      "metadata": {},
      "name": "Anual",
      "product": "prod_123",
      "recurring": {
        "interval": "year",
        "interval_count": 1,
        "trial_period_days": null,
        "usage_type": "licensed"
      },
      "tax_behavior": "unspecified",
      "type": "recurring",
      "unit_amount": 99000,
      "updated_at": null
    }
  ],
  "updated_at": "2026-05-16T15:02:10Z"
}
Atualiza um product com semântica de merge: campos ausentes ficam como estão; envie null para limpar campos opcionais. metadata, quando enviado, substitui o objeto inteiro. A resposta direta não carrega diff; quem precisa de diff lê o webhook product.updated.

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

id
string
required
ID do produto (prod_*).

Attributes

Todos os campos são opcionais.
default_price_id
string \| null
Aponta o default_price_id para outro preço existente do mesmo produto. Envie null para limpar.
description
string \| null
Nova descrição. Envie null para limpar.
image_url
string \| null
Nova imagem. Use a URL retornada por POST /v1/files com purpose=product_image. Envie null para limpar. URLs externas não são aceitas.
is_active
boolean
false tira o produto de novos fluxos de compra. true reativa.
is_tax_applicable
boolean
Ajusta a flag tributável.
metadata
object
Substitui completamente o metadata atual quando enviado.
name
string
Novo nome. Quando enviado, não pode ser vazio.
curl -X POST "https://api.chargefy.io/v1/products/prod_123" \
  -H "Authorization: Bearer {{API_KEY}}" \
  -H "Content-Type: application/json" \
  -d '{
    "default_price_id": "price_456",
    "name": "Plano Pro Plus"
  }'

Resposta

200 OK com o objeto product completo (mesmo shape de GET /v1/products/:id).
{
  "id": "prod_123",
  "object": "product",
  "created_at": "2026-05-16T14:09:27Z",
  "default_price": "price_456",
  "description": "Acesso completo",
  "image_url": null,
  "is_active": true,
  "is_tax_applicable": true,
  "livemode": true,
  "metadata": {
    "reference_id": "sku_pro"
  },
  "name": "Plano Pro Plus",
  "prices": [
    {
      "id": "price_456",
      "object": "price",
      "created_at": "2026-05-16T14:30:00Z",
      "currency": "brl",
      "is_active": true,
      "livemode": true,
      "metadata": {},
      "name": "Anual",
      "product": "prod_123",
      "recurring": {
        "interval": "year",
        "interval_count": 1,
        "trial_period_days": null,
        "usage_type": "licensed"
      },
      "tax_behavior": "unspecified",
      "type": "recurring",
      "unit_amount": 99000,
      "updated_at": null
    }
  ],
  "updated_at": "2026-05-16T15:02:10Z"
}

Erros comuns

StatuscodeQuando ocorre
400invalid_requestname enviado vazio; is_tax_applicable/is_active não-boolean; metadata não-objeto; default_price_id não pertence ao produto
400invalid_requestimage_url não aponta para um file ativo de purpose=product_image da organização
404resource_missingProduto não existe nesta organização

Webhook

A atualização dispara product.updated com o product completo em data.object e o diff em data.previous_attributes.