OAuth dispatch and audit trails
Posting in Siren is explicit. The dashboard always requires a click before dispatch: Post campaign (now) or Schedule (a local time). The API and MCP can post now, or pass scheduled_at so the drop queues when render finishes. Auto-post on an API key still fires only after an Approved verdict.
How dispatch works
When you click Post campaign, or when a scheduled drop's time hits, Siren:
- Validates that the connected account token is still valid. If expired, you will see a "Reconnect account" prompt.
- Calls the platform API with the asset payload. For cards: the PNG is uploaded to the platform's media endpoint, then a post is created. For video: the MP4 is uploaded, then posted.
- Receives a platform post ID from the API response.
- Writes an audit row: workspace ID, run ID, platform, connected account, post ID, timestamp, status.
The Distribution tab shows every audit row. Click any row to open the live post on the platform.
The audit trail
Every dispatch, successful or failed, writes an immutable audit row. Fields:
- Workspace: which workspace originated the post.
- Run ID: links back to the campaign run, including the full prompt, the rendered asset and the caption.
- Platform: X, LinkedIn, YouTube, or TikTok (with your OK on each post).
- Account: the specific connected account that was used.
- Post ID: the platform's own identifier for the post.
- Status: posted, failed, or (for API auto-post) queued.
- Timestamp: UTC time of the dispatch attempt.
Audit rows are immutable. You cannot delete an audit row from the Siren dashboard. If you delete the live post from the platform, the audit row still shows the dispatch happened. Contact support if you need to discuss a specific dispatch record.
What happens on failure
If the platform API returns an error, Siren marks the dispatch as failed and shows the failure reason in the Distribution tab. Common failure reasons:
- Token expired: the OAuth token Siren holds has been revoked or expired. Reconnect the account from Settings → Connected Accounts.
- Rate limit: the platform's API rate limit was hit. Siren does not retry automatically. Retry manually after a few minutes.
- Content policy rejection: the platform rejected the content. Siren does not catch platform content-policy rejections. Those are platform-specific rules.
- Account deauthorized: you have removed Siren's access from the platform side. Reconnect from Settings → Connected Accounts.
API auto-post
On any plan, including Spark, API keys can be configured with auto_post: true and an auto_post_min_score threshold. Auto-post fires only on Approved verdicts above your threshold. A Flagged or Rejected verdict never triggers auto-post.