x-preflight
X publishes the code that decides who sees a post on x.com. Read it in plain English, with X
The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.
Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
The payTo wallet does not resolve to a registered ERC-8004 agent. That is not a verdict on the service — most of the catalog is unregistered.
Live 402 challenge
Captured by the enrichment pass, not read just now. Prices can change — always read the 402 the endpoint answers with.
{
"call": "POST a draft post here with x402. The price is 10000 atomic units of USDC, which is $0.01, because USDC has 6 decimals. Returns a model read of the draft on top of the checks that are already free.",
"never": "this never writes or rewrites your post, and nothing is stored.",
"service": "x-preflight",
"guarantee": "payment and a COMPLETE verdict, or no payment. This is a mechanism rather than a promise: settlement runs only after the handler returns, and only when it returns under 400. If the model read fails, the handler returns 503, which cancels the payment before it can settle.",
"fast_option": "Send {\"brief\": true} to get the classification only: survival verdict, built_for, one_claim, anchored_in_public, negative_risk level, private_terms, and all eight gates. It drops the prose (why, anchor_note, changes, strongest_move) which is 78% of the generation, so it answers in SECONDS rather than tens of seconds. Same model, same reasoning, same price. If your client has a short timeout, use this.",
"you_pay_for": "the model read only: visibility-filter risk, what the post is built for, and the strongest move. It is the one part that cannot be answered from published source.",
"price_in_words": "10000 atomic = 0.01 USDC = one cent. NOT 10000 dollars. The accepts block carries atomic units because the x402 spec requires it, and it has no decimals field, so read this line.",
"if_you_cannot_wait": "Either send {\"brief\": true} to this endpoint, which answers in seconds, or use the free endpoint: POST https://kevinhoff.com/api/grade with {\"dry\":true}. It answers in under a second, costs nothing, and returns every check read from the published ranking source. Only the model read is slow, and only the model read is paid.",
"free_without_paying": "Every check read from X's open-sourced ranking code is free and unmetered at https://kevinhoff.com/api/grade with {\"dry\":true}: the eight gates, the structural consequences, the 29 action prices, the reply chain, the index windows. You do not need to pay for any of that, ever.",
"how_long_this_takes": "TWENTY TO FORTY SECONDS, because the paid half is a model reading your draft. SET YOUR CLIENT HTTP TIMEOUT ABOVE 60 SECONDS. If your client gives up sooner you will be charged and will not see the verdict, because settlement happens on our side and does not depend on you still waiting. Coinbase awal defaults near 13 seconds and is too impatient for this door as shipped.",
"how_to_check_the_guarantee": "Do not take the line above on trust. If you get a 503, look up the seller address on Base: there will be no transfer for it. If you get a 200, the body contains eight gates AND a model read with no error field, because anything less would have been a 503."
}Accepts
The payment requirements as published to the catalog. Read the live 402 before paying — a price here is a claim, not a quote.
Pay 0.01 USDC on Base to 0x3A72…ed743. The signed payment is good for 5 minutes.
- Paid to
- 0x3A72…ed743
- USD Coin contract
- 0x8335…02913
- Payment window
- 5 minutes
- As published
- 10000 smallest units
The catalog’s raw entry
[
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0x3A7292b88471691946D8D8856925e22246bed743",
"amount": "10000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 300
}
]Extensions
{
"bazaar": {
"info": {
"input": {
"body": {
"text": "the draft post you are about to publish on x.com"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"gates": [
{
"n": 1,
"src": "phoenixRankAllCandidateProcessor.strato:446-451",
"head": "It can be found by strangers.",
"name": "On the list",
"state": "go"
}
],
"model": {
"survival": {
"verdict": "clear"
},
"built_for": "copy_link",
"negative_risk": {
"level": "low"
}
},
"structural": [
{
"src": "phoenixRankAllCandidateProcessor.strato:446-451",
"fact": "enters the pool",
"detail": "An original or a quote is written to the index out-of-network readers are drawn from."
}
]
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"required": [
"text"
],
"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."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"gates",
"structural",
"model"
],
"properties": {
"gates": {
"type": "array",
"items": {
"type": "object",
"required": [
"n",
"state",
"src"
],
"properties": {
"n": {
"type": "number"
},
"src": {
"type": "string"
},
"head": {
"type": "string"
},
"name": {
"type": "string"
},
"state": {
"enum": [
"go",
"stop",
"open",
"call"
],
"type": "string"
}
}
},
"description": "The eight gates in the order X runs them, each with a state and the source line it is read from."
},
"model": {
"type": "object",
"description": "The paid half: the read of the draft itself."
},
"structural": {
"type": "array",
"items": {
"type": "object",
"required": [
"fact",
"src"
],
"properties": {
"src": {
"type": "string"
},
"fact": {
"type": "string"
},
"detail": {
"type": "string"
}
}
},
"description": "Consequences that need no model: branches in X's published source."
}
}
}
}
}
}
}
}
}Provenance
- Seen in the source catalog
- 2026-09-14 19:52Z
- Last indexed by Roundhouse
- 2026-09-24 10:00Z
- Last enriched (probe, favicon, geo)
- 2026-09-21 19:15Z
- x402 version
- 2
- Max timeout
- 300s
- Liveness probe
- HTTP 402
Hand this page to an agent
Copy the prompt and paste it into Claude, an MCP client or your own agent — it will vet this service and call it over the free read API. No key, no account.
GET api.roundhouseai.io/v0/endpoints
This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 17 snapshots so far. Verified volume counts only settlements with an on-chain EIP-3009 marker.
Show the promptHide the prompt
Using Roundhouse, look up the x402 service x-preflight and tell me whether it is worth paying: what a call costs, whether the endpoint answered when last probed, and what its payment record actually shows. curl -s 'https://api.roundhouseai.io/v0/endpoints?q=x-preflight' curl -s 'https://api.roundhouseai.io/v0/merchants/<the payTo wallet returned above>' Then call it: read the price from the live 402 at https://kevinhoff.com/api/paid/grade, never from a cached figure, and pay with an x402 client. The /v0 API needs an API key (`authorization: Bearer rh_live_…`) on everything except /v0/unified* and /v0/endpoints. Mint a personal key for $0.01 at GET https://api.roundhouseai.io/v0/test/x402, or use an organization key from https://roundhouseai.io/dashboard/team. If you do not have Roundhouse tools or skills installed, read https://roundhouseai.io/skill.md first — it is the whole procedure.