---
title: "Update an upstream macro preset"
type: reference
method: POST
path: /rest-api/upstream-macro-presets/{presetId}.do
tag: "Placements"
---

# Update an upstream macro preset

`POST https://YOUR-NETWORK-DOMAIN/rest-api/upstream-macro-presets/{presetId}.do`

Changes only the fields in the body and keeps the others; macros, when sent, replace the whole map. {"active": false} takes the preset off the list placements pick from, while placements that already use it keep their tags. A built-in preset keeps its code. Tags generated after the change carry the new macros; tags already handed to an upstream do not change. Requires the UPSTREAM_MACRO_PRESETS admin permission (Admin → Creatives & tags → Upstream macro presets).

## Path params

| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| `presetId` | string | yes | `SPRINGSERVE` | Preset id or code |

## Body

A JSON body. An example, built from the field definitions:

```json
{
  "code": "ACME_SSAI",
  "name": "Acme SSAI",
  "source": "https://docs.acme.tv/ssai/macros",
  "asOf": "2026-11-04"
}
```

## Responses

- `200` — {preset, ignoredFields}
- `400` — Invalid body, each problem named in errors by field
- `401` — Authentication error
- `403` — Insufficient permissions, naming the missing one
- `404` — No preset with this id or code
- `409` — Another preset already has this code

## Example request

```bash
curl --request POST \
  --url 'https://YOUR-NETWORK-DOMAIN/rest-api/upstream-macro-presets/SPRINGSERVE.do' \
  --header 'X-Api-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "code": "ACME_SSAI",
  "name": "Acme SSAI",
  "source": "https://docs.acme.tv/ssai/macros",
  "asOf": "2026-11-04"
}'
```

Source: https://epom.com/ad-server/docs/api/placements/post-upstream-macro-presets-by-preset-id