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
| Status | Live |
|---|---|
| Endpoints | POST /api/v1/drafts, GET /api/v1/drafts/{id}, POST /api/v1/drafts/{id}/choice |
| MCP tools | smore_draft_x_post, smore_get_draft, smore_choose_draft |
| Scopes | reddit:posts:write, reddit:posts:read |
| Price | $5 / 1M input tokens, $5 / 1M cached input tokens, $150 / 1M output tokens |
| Limits | 60 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
| Field | Rules |
|---|---|
platform | x |
type | post |
idempotency_key | Required, 8 to 128 characters of A-Za-z0-9._:-, new for each draft |
topic | Required, 10 to 300 characters: what the post is about |
facts | Required, 1 to 10 items of up to 300 characters: the only facts the post may state |
audience | Optional, up to 200 characters: who it is for |
model | Optional. Only x-writer-v1 |
count | Optional, 1 to 3 options, default 3 |
The MCP tool is smore_draft_x_post.
x-reply-v1
| Status | Live |
|---|---|
| Endpoints | POST /api/v1/drafts, GET /api/v1/drafts/{id}, POST /api/v1/drafts/{id}/choice |
| MCP tools | smore_draft_x_reply, smore_get_draft, smore_choose_draft |
| Scopes | reddit:posts:write, reddit:posts:read |
| Price | $5 / 1M input tokens, $5 / 1M cached input tokens, $150 / 1M output tokens |
| Limits | 60 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
| Field | Rules |
|---|---|
platform | x |
type | reply |
idempotency_key | Required, as above |
thread | Required, 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 |
goal | Required, 10 to 300 characters: what the reply should do |
facts | Required, 1 to 10 items of up to 300 characters |
model | Optional. Only x-reply-v1 |
count | Optional, 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.