POST /v1/content/:containerId/reject
Reject a container. A reason is required.
POST
/v1/content/:containerId/rejectPhase 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
containerIdstring (uuid)requiredThe container to reject.
Body
Body
reasonstringrequiredRejection note, 1–1024 chars. Stored on the container for audit.
Request
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." }'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();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 aCONFLICT. 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
regeneratewith an updated brief.
Errors
| Code | When |
|---|---|
CONFLICT | Container is already rejected or approved. |
VALIDATION_FAILED | Container isn't completed; or missing reason. |
NOT_FOUND | Container id not in this org. |
FORBIDDEN_SCOPE | Key lacks content:approve. |