---
title: "Pause, resume or edit a standing order"
method: PATCH
path: "/v1/standing_orders/{id}"
tags: ["Account"]
---

# Pause, resume or edit a standing order

`PATCH /v1/standing_orders/{id}`

## Request

- Base URL: `https://api.placementapi.com`
- URL: `https://api.placementapi.com/v1/standing_orders/{id}`
- Auth: HTTP bearer

Requires the `order` scope. Omitted fields are left alone; anchor_plan, if_no_content and content_mode accept null to clear.

## Path parameters

- `id` string, required

## Request body

- object
  - `status` 'active' | 'paused'
  - `brief` object
  - `cadence` 'weekly' | 'biweekly' | 'monthly'
  - `links_per_run` integer
  - `budget_credits_per_run` integer
  - `mode` 'approve' | 'auto'
  - `anchor_plan` AnchorPlan: Anchor text is a DISTRIBUTION, not a string. Many links with one exact-match anchor is the classic over-optimisation footprint. Mix branded, topical, generic and naked_url anchors.
    - `anchors` object[], required
      - `text` string, required
      - `type` 'branded' | 'naked_url' | 'generic' | 'topical' | 'partial_match' | 'exact_match', required
      - `weight` number: Relative weight; normalised across the plan.
  - `if_no_content` 'convert_to_service' | 'cancel' | 'null', nullable
  - `content_mode` 'publisher' | 'service' | 'supplied' | 'papi_written' | 'null', nullable
  - `next_run_at` string, date-time

## Response `200`

OK

- StandingOrder: A plan that re-runs on a cadence. 'approve' mode emails a held quote with an approval link each run. 'auto' places only when the account owner has enabled auto placement from the dashboard (POST /v1/customers/me/auto, session only) and the caps and per-run budget clear; otherwise it emails an approval link and says why.
  - `standing_order_id` string
  - `target_url` string
  - `brief` object: The plan_links brief to re-run; links and budget are overridden by links_per_run and budget_credits_per_run.
  - `cadence` 'weekly' | 'biweekly' | 'monthly'
  - `links_per_run` integer
  - `budget_credits_per_run` integer
  - `mode` 'approve' | 'auto'
  - `anchor_plan` AnchorPlan: Anchor text is a DISTRIBUTION, not a string. Many links with one exact-match anchor is the classic over-optimisation footprint. Mix branded, topical, generic and naked_url anchors.
    - `anchors` object[], required
      - `text` string, required
      - `type` 'branded' | 'naked_url' | 'generic' | 'topical' | 'partial_match' | 'exact_match', required
      - `weight` number: Relative weight; normalised across the plan.
  - `if_no_content` 'convert_to_service' | 'cancel' | 'null', nullable
  - `content_mode` 'publisher' | 'service' | 'supplied' | 'papi_written' | 'null', nullable
  - `status` 'active' | 'paused'
  - `next_run_at` string, nullable
  - `last_run_at` string, nullable
  - `last_quote_id` string, nullable
  - `last_outcome` string, nullable
  - `last_outcome_detail` string, nullable
  - `created_at` string

## Other responses

- `400`: Malformed request. `error` is `bad_request` (with a zod `detail`), `invalid_json`, or `unknown_parameter` / `unknown_field` (with `unknown[]` and `accepted[]`).
- `401`: Missing, malformed or revoked Bearer credential: `{ error: "unauthorized" }`.
- `403`: `insufficient_scope` when the key lacks the `order` scope; `customer_key_required` when the operator token is used where a customer must be attributable.
- `404`: `not_found`.
- `503`: `server_misconfigured` when the store is not configured; `upstream_unfunded` when the measurement provider's prepaid balance is exhausted (fresh profiles, gap maps and SERPs pause; cached results and catalogue are unaffected); `upstream_unavailable` on a provider error; `payments_unavailable` when card payments are not configured.

---

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