---
title: "Edit an existing producer offer"
method: PATCH
path: "/api/offers/edit/"
---

# Edit an existing producer offer

`PATCH /api/offers/edit/`

## Request

- Base URL: `https://productindex.ai`
- URL: `https://productindex.ai/api/offers/edit/`
- Auth: one of:
  - API key in cookie `authjs.session-token`
  - HTTP bearer

Partial update — only fields present in the body are changed. Ownership is enforced by scoping the UPDATE to the caller's `organization_id`; an `offer_id` belonging to a different org returns 404, not 403.

## Request body

- OfferEditRequest: All fields besides offer_id are optional; only fields present in the body are updated.
  - `offer_id` string, required
  - `headline` string
  - `detail` string, nullable
  - `destination_url` string, uri
  - `price_usd` number, nullable
  - `list_price_usd` number, nullable
  - `starts_at` string, date-time, nullable
  - `expires_at` string, date-time, nullable
  - `promo_code` string, nullable
  - `offer_types` string[]

## Response `200`

Updated (or no-op if no editable fields were present in the body).

- object
  - `ok` boolean

## Other responses

- `400`: Validation error, applied only to fields present in the body — headline (non-empty, ≤ 60 chars), detail (≤ 200 chars), destination_url (must be http/https), price_usd/list_price_usd (must be ≥ 0), offer_types (must be a subset of the valid enum). Unlike create, this route does not validate starts_at/expires_at ordering.
- `401`: No valid session or bearer token.
- `404`: No offer with this `offer_id` belongs to the caller's organization.

---

[API](https://skmtc.dev/productindex/apis/productindex-api.md) · [All operations](https://skmtc.dev/productindex/apis/productindex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/productindex/apis/productindex-api/revisions/73078f4d5aeb?raw)
