Set up an automation (spends balance as it runs)
create_automationSet up an automation: Spoofy places ordinary orders for the user on a plan. Kinds: spread (a total over time, e.g. {"kind":"spread","service":12,"link":"…","quantity":10000,"over":"3d"}; pace "steady" or "front" for an S-curve growth plan, "launch" for about half straight away then each run smaller), scheduled (one order at start_at), recurring (every "1d"/"6h"/"1w", optional at "14:00" + timezone, with times, until or budget), split (past one order's max), campaign (steps [{service, link, quantity, offset_minutes, over_minutes}] or template: "token-launch" + links), keep_above (target + days + budget; public Telegram channels/groups and YouTube videos only), feed (a public Telegram channel, YouTube channel, CoinMarketCap Community profile, Pinterest profile or board, Bluesky account, Reddit user or subreddit, RSS feed, or an X account while X's API is on: every new post gets quantity of service — or quantity_min + quantity_max, a random whole number in that range for each post; spread_minutes (30–360) + parts (2–10) splits each post's order into parts at random times within the window, each at least the service's minimum (pace "launch": the first part about half); delay_min_minutes + delay_max_minutes start it a random number of minutes after the post; posts: the next N posts, then it completes — "likes on my next 30 posts" is posts 30, no days needed; max_per_day; budget, needed only without posts; change them later with update_automation), per_link (a new post each run: service, quantity each run, runs, optional every "daily" + at "14:00" and days; no link now — each run goes out when its post's link is sent with add_automation_link; runs not used are never charged). For new posts elsewhere (Instagram, TikTok …) order an "On new posts" service instead (find_services; fields username, min, max, posts, delay): the provider watches the account. Service ids come from find_services. THIS SPENDS THE USER'S REAL BALANCE: each run is charged when it goes, at the price on sale then — a price that moves while it runs moves the plan with it (a rise is emailed to the user and the automation keeps running; it never pauses for a price). Call first without confirm (or with dry_run: true): you get the plan — every run's time, size and cost at today's price, the total and the balance. Tell the user the total and timing, and this line: "Prices follow our costs and can change while it runs; we’ll email you if they go up, and you can stop it any time." — get their explicit OK, then call again with confirm: true and an idempotency_key. Errors: bad_automation / bad_schedule (the message says what to change), budget_required, count_not_readable (keep_above only reads those links), bad_feed (a feed Spoofy does not read; X only while its API is on), too_many_automations, over_order_cap / platform_not_allowed / read_only_key (this key's limits).
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"automation": "<automation>"
},
"name": "create_automation"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to actually create it. Only after the user agreed to the plan and its cost. | |
| dry_run | No | true = plan and price only, create nothing. | |
| automation | Yes | The automation, exactly as POST /api/v1/automations takes it: {"kind": …, "service": …, "link": …, …}. | |
| idempotency_key | No | Unique string per intended automation; a retry with the same key returns the first one. |