---
title: "Create a standing order"
method: POST
path: "/v1/standing_orders"
tags: ["Account"]
---

# Create a standing order

`POST /v1/standing_orders`

## Request

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

Requires the `order` scope. First run defaults to now + cadence. In auto mode with auto placement not enabled on the account, runs email an approval link instead and the response note says so. Auto-placed lines default to papi_written content where no content_mode is set, so an unattended run never stalls waiting for an article.

## Request body

- object
  - `target_url` string, uri, required
  - `brief` object: A plan_links brief; links and budget_credits are overridden per run.
  - `cadence` 'weekly' | 'biweekly' | 'monthly', required
  - `links_per_run` integer, required
  - `budget_credits_per_run` integer, required
  - `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'
  - `content_mode` 'publisher' | 'service' | 'supplied' | 'papi_written'
  - `first_run_at` string, date-time

## Response `201`

OK

- object
  - `standing_order_id` string
  - `next_run_at` string
  - `mode` string
  - `note` 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.
- `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)
