Three API calls. One key. All three surfaces live.
Point any AI agent at viralr.dev/brief.md, or run the CLI yourself. Both paths produce the same final state: a registered account, a tenant API key, and the first thread generating in the background. The same /connect also arms networkr (SEO) and outboxr (email) on the same backend. One install, three surfaces.
Tell your AI agent
In Cursor, Claude Code, Continue, Aider, Lovable, Bolt, v0, or ChatGPT:
The brief is a machine-readable spec. Your agent follows the three-step flow, writes the tenant key to .env.local, connects the platforms you opt into, and (if you ask) arms networkr and outboxr on the same key.
Run it yourself
From your project directory:
Interactive: asks for domain, email, voice, connected platforms, ad opt-in, and whether to arm networkr + outboxr. Writes .env.local. Same three-step flow as the brief, wrapped.
Prefer to skip both? The manual API flow is below. What the agent or CLI is doing on your behalf.
What you need
- ✓A domain you own. DNS resolves, serves public HTML, not behind an auth wall.
- ✓An email address.
- ✓At least one social account you control. Pick from X, LinkedIn, Threads, Bluesky, Mastodon, TikTok, YouTube. You can add more later.
- ✓Optional: ad-network account(s) if you want viralr-ads. Meta Ads, X Ads, LinkedIn Ads, TikTok Ads, Reddit Ads, Google Ads.
- !Your site needs real content. An admission gate rejects empty, redirecting, or thin-content domains.
Three API calls
Base URL: https://api.networkr.dev(the suite's shared backend).
Audit the site
{
"domain": "example.com",
"email": "user@example.com",
"surfaces": ["viralr", "viralr-ads"]
}{
"token": "<onboard_token>",
"audit_score": 72,
"issues": [{ "type": "critical|warning|info", "message": "..." }],
"brand_detected": { "accent_color": "#...", "logo_url": "..." },
"voice_presets": [
{ "id": "professional|casual|technical|founder", "description": "..." }
]
}Token is valid for 24h. Pick a voice for step 2.
Confirm voice and preview
{
"token": "<from step 1>",
"voice": "technical",
"author_name": "Your Real Name",
"author_bio": "optional short bio",
"accent_color": "#E8478B",
"topics": ["optional list"],
"platforms": ["x", "linkedin", "threads", "bluesky"]
}{
"preview_url": "/preview/<token>",
"sample_thread": { "platform": "x", "hook": "...", "body": "...", "cta": "..." },
"sample_linkedin": { "title": "...", "body": "..." }
}Open https://api.networkr.dev<preview_url> to see how the first thread will land on each platform. Approve before activating.
Activate
{
"token": "<same>",
"surfaces": ["viralr", "viralr-ads", "networkr", "outboxr"],
"ads": { "networks": ["meta", "linkedin"], "daily_budget": 25 }
}The surfaces array selects which parts of the suite to arm. All four on the same /api/connect is the norm. See /docs for the full surface and adapter reference.
{
"success": true,
"site_id": "example-com",
"network_id": "...",
"api_key": {
"key": "vr_live_<32 hex>",
"prefix": "vr_live_abcd1234",
"notice": "Store this key now. It will never be shown again."
},
"armed_surfaces": ["viralr", "viralr-ads", "networkr", "outboxr"]
}api_key.key is shown once. Save it immediately. The backend keeps only a hash.
Save the install to your repo
Write these variables to .env.local at the project root:
VIRALR_API=https://api.networkr.dev VIRALR_SITE_ID=<site_id from step 3> VIRALR_KEY=<api_key.key from step 3>
Ensure .env.local is in .gitignore. Optionally drop a copy of /brief.md at .viralr/AGENT.md so future agents in the repo find the install context.
Verify the install
Authorization: Bearer <api_key.key>
Returns a 10-item checklist with statuses (ok / warning / missing), each item carrying the exact API call to fix it if needed, plus a next_step object. Includes which surfaces are armed (viralr, viralr-ads, networkr, outboxr) and which platforms are connected per surface.
Connect additional platforms later
Add a platform to a live account without re-onboarding:
Authorization: Bearer <key>
Content-Type: application/json
{ "platform": "tiktok" }The response returns an OAuth redirect URL for you to approve. Once approved, the platform joins the cross-platform reshape rotation on the next scheduled thread. To disconnect: DELETE /api/sites/<site_id>/platforms/<platform>.
Hard rules
- ✗Never invent endpoints. Use only what this page and
/docslist. Unknown routes return 404. - ✗Never edit published posts. Not supported. To change a post:
DELETE /api/sites/<id>/posts/<post_id>then regenerate. Social platforms penalize edits; the pipeline always generates fresh. - !The tenant key scopes to the account, not the surface. One key covers viralr, viralr-ads, networkr, and outboxr on the same email.
- !Onboard token expires in 24h. On
410, restart from step 1. - !Respect rate limits.
429equals wait 60s, retry once. Don't loop.
Install in the terminal right now
Point your AI agent at viralr.dev/brief.md or run npx viralr init yourself. Every install converges on the same final state: socials, paid ads, SEO, and email all armed on one key.