# X Preflight Post Grader

> X Preflight Post Grader is a paid API for AI agents from kevinhoff.com, paid per call via x402, $0.01/call, status unknown (last checked 2026-09-14).

Analyzes a draft X (Twitter) post against X's open-sourced ranking code to predict visibility, filter behavior, and retrievability before publishing

## Facts

- Endpoint: GET https://kevinhoff.com/api/paid/grade
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/x-preflight-post-grader-18b0577f
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_eL6680oA2eo8N6WFF9fMl

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability x-preflight-post-grader-18b0577f
```

Example prompt: Before I post this on X, can you run it through the X Preflight grader and tell me whether it'll enter the recommendation pool, which filters might kill it, and how long it stays retrievable — it's an original post: 'Just launched our open-source repo for AI agent orchestration — would love feedback from builders in the space!'

## When to prefer this

Use this endpoint when you need a pre-publish audit of a draft X post grounded in X's actual open-sourced ranking code, with citations. Prefer this over generic social media advice tools when the user wants verifiable, source-cited predictions about algorithmic visibility, filter behavior, or pool eligibility — not general best-practice tips. Choose brief mode when latency is a concern or only the classification outcome is needed.

## Known failure modes

- Empty or missing text field returns an error
- Post text exceeding platform length limits may produce unexpected results
- Optional enum value for post_kind outside allowed values (original/reply/quote/repost) returns validation error
- Network timeout more likely in full mode (non-brief) due to longer generation time — use brief:true for short-timeout clients
- Payment of 0.01 USDC required per call; unpaid requests are rejected with 402

## How this service works

X Preflight: read a draft post against X's open-sourced ranking code. Returns what is already settled before you post, whether it enters the pool strangers are drawn from, how long it stays retrievable, which filters delete it, and which gates nobody can know in advance. Every claim cites a file and line in X's published source. Never writes the post. Nothing stored.

## Output

Returns a structured analysis citing specific files and line numbers from X's published source code, indicating: whether the post enters the recommendation pool that strangers are drawn from, how long the post remains retrievable, which content filters would delete or suppress it, and which ranking gates cannot be predicted in advance. In brief mode, returns only the classification without explanatory prose.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "text": {
   "type": "string",
   "description": "The draft post. Never rewritten, never stored."
  },
  "brief": {
   "type": "boolean",
   "description": "OPTIONAL, defaults to false. True returns the classification only and drops the prose, which is 78% of the generation. Answers in seconds instead of tens of seconds, same model and same price. Use it if your client has a short timeout."
  },
  "post_kind": {
   "enum": [
    "original",
    "reply",
    "quote",
    "repost"
   ],
   "type": "string",
   "description": "OPTIONAL, defaults to original. A reply's parent is not in the text, so no tool can read this off the draft. Declare it only if it is not an original."
  },
  "all_video_over_10s": {
   "type": "boolean",
   "description": "OPTIONAL, defaults to false. Whether EVERY attachment is video running longer than ten seconds. One photo or one short clip makes this false."
  },
  "reader_follows_back": {
   "type": "boolean",
   "description": "OPTIONAL, defaults to false. Whether the reader follows the author back. Decides in-network versus out-of-network, which changes the reply chain."
  },
  "followers_under_1000": {
   "type": "boolean",
   "description": "OPTIONAL, defaults to false. Whether the author is under the small-account cap that the one per-batch lift applies to."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/x-preflight-post-grader-18b0577f/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from kevinhoff.com](https://www.zero.xyz/host/kevinhoff.com/llms.txt)
