Automations

Create an automation

Nothing is charged now: each run is charged when it goes, like an order you place then. Send an Idempotency-Key header so a retry never makes two. With dry_run: true you get the plan — every run with its time, size and cost — and your balance, and nothing is created. A run that would cost more than planned (a price change) pauses the automation instead; a short balance skips a run of a repeat (tried again next run) and pauses a planned total until you top up — it then resumes by itself.

post/api/v1/automations

Request

  • Base URL: https://spoofy.social
  • URL: https://spoofy.social/api/v1/automations
  • Auth: one of:
    • HTTP bearer
    • API key in cookie better-auth.session_token

Headers

Idempotency-Keystring

Any unique string (≤ 120 chars) per intended order. Retrying with the same key returns the first order instead of charging twice.

Request body

kind'spread' | 'scheduled' | 'recurring' | 'split' | 'campaign' | 'keep_above' | 'feed' required
namestring
timezonestring

IANA time zone the times are in, e.g. "America/Costa_Rica" (default UTC).

start_atstring date-time

When the first run goes (default now), with an offset, e.g. 2026-10-18T14:00:00-06:00. Up to 90 days ahead.

budgetstring

The most its orders may cost together, net of refunds. USD as a decimal string.

serviceinteger

Service id (GET /api/v1/services).

linkstring
quantityinteger

spread / split: the total · scheduled / recurring: each run · feed: each post.

overstring

spread: how long, e.g. "3d", "12h", "90m".

over_minutesinteger

spread: the same in minutes (0 = all at once).

runsinteger

spread / campaign steps: how many runs (default: about one every 3 h, kept within the service range).

interval_minutesinteger

spread with runs: minutes between runs.

pace'even' | 'steady' | 'front'

even, or an S-curve: steady (slow start, fast middle, slow end) or front (the bulk early).

naturalboolean

±15 % on each run's time and size, the total exact (default on; off = exact runs). Exact runs of equal size (2–100 runs, 1–1,440 minutes apart) on a service that delivers in runs itself go as one order, delivered in those runs.

atstring

recurring by day or week: the time of day in timezone, e.g. "14:00".

timesinteger

recurring: how many runs.

untilstring date-time

recurring: no runs after this.

templatestring

A kit id (e.g. "token-launch") or one of your saved templates (GET /api/v1/automations/templates).

linksobject

With a template: the link for each slot, e.g. {"x_post": "https://x.com/…"}.

quantitiesobject

With a kit: another quantity per slot or step index.

targetinteger

keep_above: the count to stay at or above.

daysinteger

keep_above / feed: for how many days (up to 90).

check_every_minutesinteger

keep_above: how often the public count is read (at least 30, default 60).

feedstring

feed: https://t.me/yourchannel, https://www.youtube.com/@yourchannel, or an RSS / Atom feed URL. Not X.

max_per_dayinteger

feed: at most this many posts a day (default 5).

delay_minutesinteger

feed: wait this long after a post before ordering.

dry_runboolean

Answer the plan and its cost; create nothing.

Example request

{
  "over": "3d"
}

Response

Dry run — or a replay of an earlier create with the same Idempotency-Key (replayed: true).

dry_rununknown

Changes

No recorded changes to this operation across all 1 revision of this API.