Skip to main content

X writers

x-writer-v1 writes X posts and x-reply-v1 writes replies, both from your facts

The X writers use the drafts resource with platform: "x". x-writer-v1 writes an original post from a topic and your facts; x-reply-v1 writes a reply that joins a conversation in its own tone. Each returns up to three options to review. S'more posts nothing; to publish, use your own account or the approved posting tools.

x-writer-v1​

StatusLive
EndpointsPOST /api/v1/drafts, GET /api/v1/drafts/{id}, POST /api/v1/drafts/{id}/choice
MCP toolssmore_draft_x_post, smore_get_draft, smore_choose_draft
Scopesreddit:posts:write, reddit:posts:read
Price$5 / 1M input tokens, $5 / 1M cached input tokens, $150 / 1M output tokens
Limits60 drafts a day and 5 drafts open at once per workspace
curl -s https://app.makesmores.com/api/v1/drafts \
-H "Authorization: Bearer $SMORE_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<EOF | tee x-post.json
{
"platform": "x",
"type": "post",
"idempotency_key": "docs-x-post-$(date +%s)",
"topic": "We opened our public API today",
"audience": "Developers who build agents",
"facts": [
"One key reaches every product over REST and MCP",
"Personal workspaces get free credits every month"
]
}
EOF
FieldRules
platformx
typepost
idempotency_keyRequired, 8 to 128 characters of A-Za-z0-9._:-, new for each draft
topicRequired, 10 to 300 characters: what the post is about
factsRequired, 1 to 10 items of up to 300 characters: the only facts the post may state
audienceOptional, up to 200 characters: who it is for
modelOptional. Only x-writer-v1
countOptional, 1 to 3 options, default 3

The MCP tool is smore_draft_x_post.

x-reply-v1​

StatusLive
EndpointsPOST /api/v1/drafts, GET /api/v1/drafts/{id}, POST /api/v1/drafts/{id}/choice
MCP toolssmore_draft_x_reply, smore_get_draft, smore_choose_draft
Scopesreddit:posts:write, reddit:posts:read
Price$5 / 1M input tokens, $5 / 1M cached input tokens, $150 / 1M output tokens
Limits60 drafts a day and 5 drafts open at once per workspace
curl -s https://app.makesmores.com/api/v1/drafts \
-H "Authorization: Bearer $SMORE_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<EOF
{
"platform": "x",
"type": "reply",
"idempotency_key": "docs-x-reply-$(date +%s)",
"thread": [
{ "from": "Original post", "body": "What is everyone using to give agents access to Reddit data?" }
],
"goal": "Answer the question and mention that the S'more API has an MCP server",
"facts": [
"S'more's MCP server works with OAuth in Claude, Claude Code, Codex and Cursor",
"Reddit mentions, signals and top posts are available as MCP tools"
]
}
EOF
FieldRules
platformx
typereply
idempotency_keyRequired, as above
threadRequired, 1 to 6 messages, oldest first, each {from, body}: the post and the replies you are answering. from is up to 100 characters and body up to 1,000, and may break lines. The reply answers the last message. Third-party text; the read returns it as x.thread_untrusted
goalRequired, 10 to 300 characters: what the reply should do
factsRequired, 1 to 10 items of up to 300 characters
modelOptional. Only x-reply-v1
countOptional, 1 to 3 options, default 3

The MCP tool is smore_draft_x_reply.

Reading and choosing​

Poll GET /api/v1/drafts/{id} (or smore_get_draft) every poll_after_s seconds. A ready X draft has up to three options, each with its model (X drafts are never blind), the body to copy into X, its words and a facts check of numbers and names against your facts:

{
"option": "A",
"model": "x-writer-v1",
"body": "Our public API is open today. One key reaches every product over REST and MCP, and personal workspaces get free credits every month.",
"words": 23,
"facts": { "local_check": "pass", "added_numbers": [], "missing_numbers": [], "missing_names": [] }
}

The read echoes your request under x: topic, audience and facts for a post, or goal, thread_untrusted and facts for a reply. It also has fact_check, a rubric and your facts for your agent to check each option before showing it. Record the pick with POST /api/v1/drafts/{id}/choice (or smore_choose_draft). Reddit writers shows the rest of the read.

Options are short and casual and fit in 280 characters, which holds only a few facts: one to four work best. The post states only what facts holds, plus numbers the topic, audience, goal or thread give.

No field may hold a link, a [slot] or a <slot>, including the thread, and no field may be null. A broken rule answers 422 content_invalid with every broken rule in details, such as {"field": "thread[0].body", "rule": "no_link"}.

Billing​

Both writers bill tokens in and out, counting every candidate: $5 / 1M input tokens, $5 / 1M cached input tokens, $150 / 1M output tokens. Each draft writes 16 candidates of up to 384 tokens and returns the best. When you submit, it deducts that maximum plus the prompt, about 924 credits (about $0.924 at list), and when it finishes it charges the tokens used and refunds the rest. A failed draft is refunded in full.

If the X writers are ever unavailable, they show as coming soon in GET /api/v1/models and a request with platform: "x" answers 400 draft_type_coming_soon without storing or charging anything.

See X post examples and X reply examples.