Add a feed or a Google Sheet

Feeds and sheets per account, both kinds together: Free 1, Starter 25, Pro 100, Agency 500, Scale 2,000. Read no more often than the plan allows: Free every 6 hours, Starter hourly, Pro and above every 30 minutes; asking for faster reads, more items per read or AI writing than the plan has answers 403 with the plan that has it. Find a feed from any site, blog or YouTube channel first with POST /api/rss/discover.

kind rss: the first read happens now and only records what is already in the feed. Each new item (new by its guid AND its link) becomes a post, at most the plan's items per read (Free 1, Starter 3, Pro 5, Agency and Scale 10), queued now or in the brand's next free slot, or sent to approvals; brand approval rules for automations apply too.

kind sheet (a Google Sheets link): the bulk upload's columns plus an optional status column (only Approved or Ready rows). The first read schedules the ready rows ahead (rows in the past are skipped), at most the plan's CSV rows per upload per read; on Free 3 wait in the queue and the rest are saved as held until an upgrade. Each row is scheduled once: a row whose text or time changed after it was scheduled is reported in last_error, never scheduled again. Until sql/pw_sheet_feeds.sql runs on the server a sheet answers 503 automation_unavailable.

A feed is turned off after 10 failed reads in a row.

post/api/rss

Request

  • Base URL: https://postwire.io
  • URL: https://postwire.io/api/rss
  • Auth: HTTP bearer

Request body

kind'rss' | 'sheet'

sheet: a Google Sheet (a docs.google.com/spreadsheets link is taken as one even without kind).

urlstring required

RSS 2.0, RSS 1.0 or Atom, or for kind sheet a Google Sheets sharing, Publish to web or export link (stored as that tab's CSV address). http or https on ports 80, 443, 8080 or 8443; private, loopback, link-local and metadata addresses are refused (400 feed_url_blocked), also when a name resolves to one or a redirect points at one; at most 3 redirects, 8 seconds, 2 MB.

timezonestring

kind sheet: the timezone of times without one (a row's timezone column wins). Default: the brand's queue timezone.

titlestring
platformsstring[]

Required for a feed. Not YouTube or TikTok (video only). Instagram gets an item only when it has an image. For a sheet: the networks of a row whose networks cell is empty.

templatestring

{title}, {link}, {summary}. Fitted to each network's limit as that network counts it: the summary is shortened first, then the title; the link is never cut.

interval_minutesinteger

Default: hourly, or the plan's pace when it is slower (Free: 360). Below the plan's pace: 403 feed_interval_limit.

max_itemsinteger

New items posted per read, oldest first; the rest wait for the next read. Default 3, or the plan's items per read when lower (Free: 1). Above it: 403 feed_items_limit.

mode'auto' | 'approval'

approval: every new item waits for approval (paid plans).

post_at'now' | 'next_slot'
include_imageboolean
ai_rewriteboolean

Write each network's post with AI (paid plans; on Free 403 plan_feature feed_ai): one AI draft per item, from the workspace's AI budget, never an extra charge; the template when it is used up or the account's email is not confirmed.

post_latestboolean

Also post the newest item now. Otherwise the items already in the feed are recorded, not posted.

enabledboolean
brand_idstring uuid

Response

{ ok, feed, first_read: { primed? | posted? | held? | later? | error? }, message }

Changes

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