# vibedraft pricing

Credits meter the agent surface — the MCP connector and the public API.
Composing in the vibedraft web app is not metered.

## Costs

- Plain post: 1 credit
- Post containing a URL: 13 credits
- Signal bundle: 1 credit
- Reading metrics: free

Cost is charged once, at the point the post is scheduled or published. A
draft that is never published costs nothing. `preview_post` returns the
exact cost of a specific draft before anything is spent.

## Plans

- **basic** — $19.99/month, 1000 credits/month, 1 account per channel, 7-day free trial
- **pro** — $39.99/month, 3000 credits/month, 3 accounts per channel, 7-day free trial

## Top-up packs

One-time purchases. They do not expire and do not change your plan.

- 100 credits — $7
- 500 credits — $30
- 1500 credits — $80

## Tools

- `get_onboarding_state` — Whether your login can use VibeDraft yet and the one next thing to do about it — a tool to call, or a link to open when the step needs a browser. (free)
- `start_intake` — Begin or resume the onboarding interview. Returns the next thing to find out and how to ask it. (free)
- `answer_intake` — Record what you said, in your own words, and get the next prompt, or that the interview is complete. (free)
- `restart_intake` — Run the interview again when something about you has changed. Your old answers stay as history; the questions get asked fresh. (free)
- `get_intake_status` — Where the interview stands, and your 7-day activation plan once it's complete. (free)
- `get_account_context` — Everything VibeDraft knows about you and your business, as one block, plus the few things most worth learning next and why each matters. (free)
- `capture_context` — Record things that came up in conversation: a fact, a number with its date, a preference, a correction, something a customer said. Vague values are sent back with what would make them specific. (free)
- `import_context` — Paste the memory another assistant kept about you (Claude, ChatGPT) and VibeDraft files what is durable under the right slots, marked imported, and proposes any goals it states. (free)
- `note_turn` — Hand VibeDraft what you just said, verbatim. It keeps the facts, numbers, preferences and corrections worth keeping, proposes any goal you stated, and tells the agent what it kept so you can undo it. (free)
- `search_journal` — Search everything you have said to any connected assistant or in Compose, kept whole with its date. The record under the memory summary: what you said about pricing, when you started something, what you decided. (free)
- `confirm_context` — Mark lines the agent believed about you as confirmed, once you have agreed. (free)
- `forget_context` — Retire a line about you. Kept as history, no longer read. (free)
- `list_accounts` — Every account this login drives — X handles, Instagram and TikTok accounts — with id, channel, status and which one this connector is acting as. (free)
- `switch_account` — Point this connector at a different account on either channel. Saved per connector, so your other clients are unaffected. (free)
- `get_voice_context` — Your voice, resolved for the active account's channel and format: profile, brand layer, channel conventions and limits, hard rules, drafting rules, and what is still missing. Can also carry what you said this chat. (free)
- `update_voice_profile` — Rewrite your voice profile from chat. Full replace, versioned, and free — the same document /voice edits. A document that omits sections you already have is rejected rather than applied. (free)
- `get_signals` — Active signal briefs: what's moving right now in your niches. (from 1 credit)
- `list_bookmark_folders` — Your X bookmark folders, with the id analyze_bookmark_folder takes. (free)
- `list_bookmarks` — Everything you have bookmarked on X, newest first, with each post's author, metrics, folders and link. Free in credits; a tenth of a cent per bookmark on X, once a day. (free)
- `analyze_bookmark_folder` — Read a bookmark folder of posts you admire and get the evidence for why each did well and what they share: metrics, each post's multiple over its author's normal, what it quoted or answered, the replies under it on request, its trajectory over time, and the folder's structural features against a control group of tracked creators. Free in credits; posts are read from X once (about half a cent each), stored, and re-read daily while young. (free)
- `get_goal` — The handle's goal archetype, and whether a human has confirmed it. The archetype selects the ranker's weight vector. (free)
- `set_goal` — Set the goal by picking an archetype or by classifying the user's own words. (free)
- `confirm_goal` — Record that the user agreed with a classified archetype. (free)
- `add_objective` — Record an account-wide goal in the user's words (e.g. more people trying vibedraft). Every agent reads these as context; the reply judge weighs posts against them. (free)
- `create_short_link` — Make a tracked short link (vibedraft.app/l/<slug>) for one place on X: clicks, the signups they become and the paid checkouts after are attributed to it. (free)
- `get_link_report` — Every tracked link with clicks, visitors, signups and paid revenue, so the next link goes where the last one worked. (free)
- `archive_objective` — Retire one account goal by id. Kept, not deleted. (free)
- `list_tracked_handles` — The accounts Radar listens to for the active handle, whether each follows the handle back, and what tracking does and costs. (free)
- `track_handle` — Add an X account to the list Radar reads new posts from (about half a cent a post, a few cents a month). Nothing changes on X. (free)
- `untrack_handle` — Stop reading an account's posts. Posts already read stay. (free)
- `get_engage_queue` — Who to reply to right now, ranked, with the reason each card ranked. Writes: every card returned is logged with the probability it was shown at. (free)
- `record_engage_decision` — Record that a queue card was replied to or skipped. A skip is a training signal, not a discard. (free)
- `take_plan` — Claim a queue card's plan before drafting, so two agents never answer the same post. (free)
- `get_daily_pack` — Voice + signals + upcoming schedule as one bundle, so a session can start with a single call. Can also carry what you said this chat, so it is remembered. (free)
- `get_pricing` — Credit costs, available plans, and your current balance. (free)
- `get_post_metrics` — Impressions, likes, replies and bookmarks for posts you've published. (free)
- `search_my_posts` — Search your own published posts by keyword, so a draft does not repeat something you already said. (free)
- `search_trending_posts` — What creators you track are posting on a topic, ranked by engagement — evidence of what lands, not phrasing to copy. (free)
- `growth_posts` — The posts that drove people to your profile, by rate rather than reach — the closest thing to a growth ranking. (free)
- `top_posts` — Your best-performing posts, optionally per weekday — real exemplars to draft from, not a description of your style. (free)
- `engagement_by_local_hour` — Your average engagement by hour of day, so an agent can place a post where your account actually performs. (free)
- `engagement_by_dow_and_hour` — The same, broken down per day of the week, with thin days flagged rather than guessed at. (free)
- `list_scheduled` — Everything queued and not yet posted, each with a link that opens it in VibeDraft. (free)
- `create_media` — Register an image, GIF, or mp4 and get a signed URL to PUT the bytes to. Returns a media_id for preview_post or schedule_post, which verify the upload — there is no separate complete step. Needs a shell or HTTP client to upload the bytes; video must carry an audio track. (free)
- `list_media` — Media already uploaded and verified, newest first. The normal way to attach a file the user already has — no bytes move. (free)
- `upload_media` — Send a TINY file's bytes inline (base64) when no network upload is possible — icons and cards, never video. You must generate every character yourself, so anything sizeable fails partway. Verifies on arrival. (free)
- `import_media` — Fetch a file from a public https link into the media library and verify it; returns a media_id. The route for a chat client that can only say where the file is. Nothing is posted. (free)
- `get_capabilities` — The formats an account accepts (X: post, thread; Instagram: image, carousel, reel, story; TikTok: video, photo) with the exact media, caption and pricing rules for each, read from the channel adapter. Nothing is written. (free)
- `preview_post` — Validate a draft, X text or an Instagram or TikTok payload, and get its exact cost plus a short-lived confirmation nonce. For TikTok the reply also carries the creator name, the privacy options and the consent line to show the user. Media is checked against the channel's rules here, with the fix named when it fails. Pass sources to back a draft's numbers and links: every number must be in a quote and every URL is fetched live, so a removed post or an unsourced figure refuses the preview instead of shipping. Nothing is published by this call. (free)
- `publish_post` — Post immediately. Requires the nonce from preview_post, and publishes the content stored on that preview — not content passed here — to the channel it was previewed for. (from 1 credit)
- `publish_instagram` — Publish a previewed Instagram image, carousel, reel or story now, by preview_id. Instagram processes reels before they appear; the reply says 'processing' when that outlasts the call and VibeDraft finishes it. Refunded if Instagram rejects it. (from 1 credit)
- `publish_tiktok` — Publish a previewed TikTok video or photo post now, by preview_id. The video is uploaded to TikTok in chunks and processed before it appears; the reply says 'processing' when that outlasts the call and VibeDraft finishes it. Refunded if TikTok rejects it. (from 1 credit)
- `cross_post` — Queue drafts across accounts and channels for one scheduled_for in a single call. Every draft is validated before anything is charged; charged per draft at that channel's price. Pass sources on a draft to back its numbers and links, same as preview_post. No preview, so show the user each draft first. (from 1 credit)
- `preview_article` — Convert markdown into a long-form X Article and check it before anything is created. Returns a one-time preview_id. Nothing is sent to X by this call. (free)
- `publish_article` — Redeem an article preview. Creates a private draft you can still read and discard on X, and only publishes publicly when the preview was made with publish: true. Requires X Premium. (from 1 credit)
- `list_blog_targets` — List the blogs a draft can be rendered for. Each has its own frontmatter schema and body dialect. (free)
- `preview_blog` — Validate a blog draft against a target's schema and convert its body to that target's dialect. Returns a one-time preview_id. Publishes nothing. (free)
- `publish_blog` — Redeem a blog preview. The default export mode returns the rendered file and writes nothing. Mode git commits it to your blog repo and opens a pull request it never merges. Mode api publishes to dev.to, Hashnode or Ghost, as a draft unless the preview said publish live. Free in every mode. (from 0 credits)
- `syndicate_blog` — Package an already-published post for Medium or Substack: paste-ready body plus a checklist. Free — those platforms have no publishing API, so the human pastes. (free)
- `schedule_post` — Queue a post, thread, or Instagram / TikTok payload for later and get the link that opens it in VibeDraft. Pass sources to back its numbers and links, same as preview_post. Credits are debited atomically with the write. (from 1 credit)
- `cancel_scheduled` — Remove something from the queue before it goes out. (free)
- `emit_event` — Record something that happened to the product — a milestone crossed, a feature shipped, a customer won or churned, a theme in support — so it can be marketed later. Writes to VibeDraft only: nothing posts, nothing is scheduled, no credits are spent. A plain-words title is required. (free)

## Notes for agents

- Call `get_pricing` for the live balance; the numbers above are static.
- Publishing always requires a `preview_post` nonce. There is no path that
  posts to X without an explicit confirmation step.
- Insufficient credits returns a structured error carrying your balance, the
  cost of the attempted action, and a top-up URL.

Human-readable pricing: https://vibedraft.app/pricing
Connector setup: https://vibedraft.app/docs/connector
