Layers
Partner APIAPI referenceApproval

POST /v1/content/:containerId/reject

Reject a container. A reason is required.

View as Markdown
POST/v1/content/:containerId/reject
Phase 1stable
Auth
Bearer
Scope
content:approve

Flips approvalStatus to rejected and stamps the reviewer. Rejected containers can't be scheduled. If you want a new take, call regenerate separately — this endpoint does not kick off a regeneration.

Path parameters

  • containerId
    string (uuid)required
    The container to reject.

Body

Body
  • reason
    stringrequired
    Rejection note, 1–1024 chars. Stored on the container for audit.

Request

terminal
curl -X POST https://api.layers.com/v1/content/{containerId}/reject \
  -H "X-Api-Key: $LAYERS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Hook is off-brand; want something punchier." }'
reject.ts
const res = await fetch(
  `https://api.layers.com/v1/content/${containerId}/reject`,
  {
    method: 'POST',
    headers: {
      'X-Api-Key': process.env.LAYERS_API_KEY!,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ reason: 'Needs a new angle.' }),
  },
);
const result = await res.json();
reject.py
import os, httpx

r = httpx.post(
    f"https://api.layers.com/v1/content/{container_id}/reject",
    headers={
        "X-Api-Key": os.environ["LAYERS_API_KEY"],
        "Content-Type": "application/json",
    },
    json={"reason": "Off-brand hook."},
)
result = r.json()

Responses

200Rejected.
{
  "id": "cnt_01HXZ9...",
  "approvalStatus": "rejected",
  "rejectedAt": "2026-04-18T09:44:50Z",
  "rejectedBy": "api_key_c2037bb9...",
  "reason": "Hook is off-brand; want something punchier."
}
409Container is already rejected or approved.
{
  "error": {
    "code": "CONFLICT",
    "message": "Container is already rejected.",
    "requestId": "req_...",
    "details": { "approvalStatus": "rejected" }
  }
}

Notes

  • Approved → rejected isn't supported. Once a container is approved, rejecting it is a CONFLICT. If approved content is wrong, cancel any scheduled posts and regenerate.
  • The first-N counter doesn't decrement on rejection. Rejection is "this specific container didn't pass review", not "undo an approval". The counter is about building trust over time.
  • To produce a new take, call regenerate with an updated brief.

Errors

CodeWhen
CONFLICTContainer is already rejected or approved.
VALIDATION_FAILEDContainer isn't completed; or missing reason.
NOT_FOUNDContainer id not in this org.
FORBIDDEN_SCOPEKey lacks content:approve.

See also

On this page