---
title: "Update a product"
method: PATCH
path: "/api/products/{id}"
tags: ["products"]
---

# Update a product

`PATCH /api/products/{id}`

## Request

- Base URL: `https://api.depixapp.com`
- URL: `https://api.depixapp.com/api/products/{id}`
- Auth: HTTP bearer

Partial update — only provided fields change. Requires scope `merchant_write` on the API-key path.

## Path parameters

- `id` string, required

## Request body

- ProductUpdateRequest: Partial product update — only the provided fields change. Nullable fields (description, image_url, callback_url, redirect_url, metadata) accept null/empty string to clear.
  - `name` string: New product name (2–80 chars).
  - `slug` string: New URL slug (must stay unique per merchant and mode).
  - `amount` integer: New price in cents. Range: 500–600000.
  - `description` string, nullable: New description (null/empty clears it).
  - `image_url` string, nullable: New HTTPS image URL (null/empty clears it).
  - `callback_url` string, nullable: New HTTPS webhook endpoint (null/empty clears it).
  - `redirect_url` string, nullable: New HTTPS redirect (null/empty clears it).
  - `metadata` object, nullable: New metadata object (null clears it, max 4KB serialized).
  - `expires_in` integer: New checkout QR lifetime in seconds (300–1200).
  - `due_date` string: Charges only: new first due date (YYYY-MM-DD). Cannot be cleared.
  - `recurrence` string, nullable: Charges only: new recurrence (null makes it one-time).
  - `late_fine_bps` integer: Charges only: new one-time fine in basis points (0–2000).
  - `late_interest_monthly_bps` integer: Charges only: new monthly interest in basis points (0–1000).

## Response `200`

Updated.

- SuccessResponse: Generic success acknowledgment.
  - `success` true, required: Always true on success.

## Other responses

- `400`: Invalid field value or empty update.
- `401`: Missing/invalid credentials. `invalid_api_key` for a failed sk_* lookup (revoked/expired/unknown); `invalid_token` for a bad or missing JWT/Authorization header.
- `403`: The API key lacks the `merchant_write` scope required by this operation. May also be `account_blocked`, or an operation-specific 403 — see the error catalog.
- `404`: Product not found — includes rows owned by another account (ownership is never disclosed).
- `409`: New slug already used by another product.
- `429`: Rate limited. Beyond the endpoint's own limit when set (`rate_limited`), API-key calls are also bounded by the shared per-merchant budget (`merchant_rate_limited`, default 30 req/min across all endpoints) and by the key's own rate limit when configured (`rate_limited`). Retry after `retry_after` seconds (also in the Retry-After header).

---

[API](https://skmtc.dev/depixapp/apis/depix-api.md) · [All operations](https://skmtc.dev/depixapp/apis/depix-api/llms.txt) · [OpenAPI document](https://skmtc.dev/depixapp/apis/depix-api/revisions/04094536dd0f?raw)
