---
title: "Dry-run guardrails on a draft"
method: POST
path: "/guardrails/check"
---

# Dry-run guardrails on a draft

`POST /guardrails/check`

## Request

- Base URL: `https://xpost.to/api/v1`
- URL: `https://xpost.to/api/v1/guardrails/check`
- Auth: HTTP bearer

Check a caption against the project's brand guardrails (banned words/topics, tone, link policy, posting cap) WITHOUT creating a post. Fix the draft before create_post instead of burning a rejection.

Read `rules_checked` before treating a pass as a pass: empty means the project has no guardrails configured, so `allowed: true` means nothing objected rather than that the caption was checked. `rules_skipped` lists rules that were asked and could not answer — the topic and tone classifiers fail open by design.

## Request body

- object
  - `caption` string, required

## Response `200`

Verdict

- object
  - `allowed` boolean
  - `violations` object[]
  - `rules_checked` string[]
  - `rules_skipped` string[]

## Other responses

- `400`: Missing caption
- `401`: Missing or invalid API key
- `429`: Rate limited

---

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