---
title: "Replace a placement's details"
method: PUT
path: "/api/products/{productId}/placements/{placementId}"
tags: ["Products / Placements"]
---

# Replace a placement's details

`PUT /api/products/{productId}/placements/{placementId}`

## Request

- Base URL: `https://api.payware.eu`
- URL: `https://api.payware.eu/api/products/{productId}/placements/{placementId}`
- Auth: HTTP bearer

Every field is replaced; a missing active keeps the current value

## Path parameters

- `productId` string, required
- `placementId` string, required

## Request body

- PlacementRequest
  - `name` string, required: Placement name, up to 100 characters
  - `campaignId` string: The campaign it belongs to, if any
  - `medium` string, required: What the placement is: PRINT, PACKAGING, OUTDOOR, IN_STORE, EVENT, TV, RADIO, STREAMING, ONLINE, SOCIAL, EMAIL, SMS or OTHER
  - `carriers` string[], required: The methods that carry it: QR, BARCODE, NFC, BLE, LINK, SMS, SOUNDBITE (airs the product's audio)
  - `channel` string: Descriptive, e.g. the TV channel or the website, up to 100 characters
  - `location` string: Descriptive, e.g. the venue or the address, up to 255 characters
  - `externalRef` string: An agency's own code, up to 100 characters
  - `regions` string[]: ISO 3166-1 alpha-2 codes of the countries it airs in; empty means anywhere. Matched against the paying bank's country
  - `active` boolean: Whether it is in use. Governs airing and the soundbite attribution; a printed code keeps resolving until the placement is deleted
  - `activeFrom` string: Start of its active window, ISO-8601 with offset; empty means the product's
  - `activeTo` string: End of its active window, ISO-8601 with offset; empty means the product's

## Response `200`

Updated

## Other responses

- `400`: Invalid placement
- `401`: Unauthenticated - missing, malformed or expired credentials
- `403`: Forbidden - the caller is authenticated but not permitted (plan or capability gate, KYC state, or tenant scope)
- `404`: Placement not found.
- `429`: Too many requests - the caller exceeded its per-partner rate limit. Carries errorCode ERR_RATE_LIMIT_EXCEEDED and a Retry-After header, in seconds. The request was not processed, so the identical request is safe to retry once the window has passed.

---

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