# Delete product

Permanently remove one Store product from the community that owns your API key.

- Endpoint: `DELETE https://api.returning.ai/v1/products/{productID}`
- Section: Store and rewards / Products
- Authentication: `Authorization: Bearer <API_KEY>` (Community API key)
- Permission: `store` (Shown in the dashboard as "Store")
- Retries: No Idempotency-Key; a repeat returns 404
- Guide: hand-written
- Verified: live, 2026-09-27
- Last updated: 26 Sep 2026
- Web page: https://docs.returning.ai/api-reference/store-products/delete-product

## When to use this

- A reward is discontinued and should never come back.
- You created a product by mistake, for example with the wrong category or price.
- You clean up test products after checking your integration.

**Instead:** Use [Update product and append vouchers](https://docs.returning.ai/api-reference/store-products/update-product-and-append-vouchers.md) instead with `isArchived` set to `true` to hide a product you may bring back.

**No undo:** A deleted product can't be restored or read again. Archive it instead if you might need it later.

## Authentication

- Header: `Authorization: Bearer <API_KEY>`
- Permission: `store`

Send a Community API key with the `store` permission. The key decides the community, so you can only delete products in that community. Keep the key on your server.

## Behaviour

The product is removed at once and can't be restored: Read product returns `404` from then on. Orders traders already placed for it are kept, and still appear in the order lists and order detail. Those orders can lose the product's ID and name, because the product can't be looked up any more.

Archiving keeps the product and hides it from traders. Use Update product and append vouchers with `isArchived: true` when you might want it back.

## Request

### Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `productID` | `string` | Yes | ID of the product to delete, from List products or Read product. (24-character hex ID) |

### Headers

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `Authorization` | `string` | Yes | Community API key with `store`. (`Bearer <API_KEY>`) |

### Example request

```bash
curl --request DELETE \
  --url https://api.returning.ai/v1/products/66f000000000000000000101 \
  --header 'Authorization: Bearer <API_KEY>'
```

## Response

A `200` returns the deleted product's ID as a string in `data`. Branch on the HTTP status and `meta.code`, never on `message`.

### Response fields

| Field | Type | Presence | Description |
| --- | --- | --- | --- |
| `meta` | `object` | always | Status details. |
| `meta.status` | `string` | always | Result of the request. (`success`) |
| `meta.statusCode` | `integer` | always | The HTTP status, repeated. |
| `meta.code` | `string` | always | Machine-readable result code. (`PRODUCT_DELETED`) |
| `message` | `string` | always | Human-readable summary. Do not branch on it. |
| `data` | `string` | always | ID of the deleted product. |

### Example response (200)

```json
{
  "meta": {
    "status": "success",
    "statusCode": 200,
    "code": "PRODUCT_DELETED"
  },
  "message": "Delete product success.",
  "data": "66f000000000000000000101"
}
```

## Errors

Every error carries its code in `meta.code`, with the reason in `detail`. A product in another community returns `404`, the same as a missing one.

### Fix the request

| Status | Code | What to do |
| --- | --- | --- |
| 400 | `VALIDATION_FAILED` | `productID` isn't a 24-character hex ID. Nothing was deleted. |
| 401 | `AUTH_API_KEY_REQUIRED` | No key was sent. Send `Authorization: Bearer <API_KEY>`. |
| 401 | `AUTH_API_KEY_INVALID` | The key is unknown, expired or malformed. Use a current Community API key. |
| 403 | `AUTH_PERMISSION_REQUIRED` | The key lacks `store`. Add the permission in Settings > Integration > API Keys. |

### Fix the data

| Status | Code | What to do |
| --- | --- | --- |
| 404 | `STORE_RESOURCE_NOT_FOUND` | No product with this ID in your community. It may already be deleted, or belong to another community. If you are retrying a delete, treat this as done. |

### Retry with backoff

| Status | Code | What to do |
| --- | --- | --- |
| 502 | `STORE_DEPENDENCY_UNAVAILABLE` | The outcome is unknown. Read the product; if it still exists, delete it again. |
| 500 | `INTERNAL_ERROR` | The outcome is unknown. Read the product; if it still exists, delete it again. |
| 401 | `AUTH_API_KEY_VALIDATION_FAILED` | The key could not be checked just now, and nothing was deleted. Retry with backoff. |

**Retries:** Delete product does not accept an `Idempotency-Key`. Once a delete has succeeded, sending it again returns `404`, so treat a `404` on a retry as done. After a timeout, a `500` or a `502`, read the product first and delete again only if it still exists. Over the [rate limit](https://docs.returning.ai/how-it-works.md#rate-limits), requests return `429`; wait for the window to reset, then retry.

## Next step

- [Read product](https://docs.returning.ai/api-reference/store-products/read-product.md): `GET /v1/products/{productID}`. Confirm the delete. Read product now returns `404 STORE_RESOURCE_NOT_FOUND` for this ID.
- [Replace it with Create product with vouchers](https://docs.returning.ai/api-reference/store-products/create-product-with-vouchers.md): `POST /v1/products`.
