# ViralNote Developers

- **API reference:** https://www.viralnote.app/developers/docs (interactive) · https://www.viralnote.app/openapi.json (OpenAPI 3.1 JSON)
- **API keys:** https://dashboard.viralnote.app/developers/auth — self-serve, scoped, rotatable
- **Base URL:** `https://dashboard.viralnote.app/api/v1` (alias `https://www.viralnote.app/api/v1`)
- **Auth:** `Authorization: Bearer vnd_...` or `x-api-key: vnd_...`; OAuth 2.0 for MCP clients. Walkthrough: https://www.viralnote.app/auth.md
- **MCP server:** `https://dashboard.viralnote.app/api/mcp/mcp` — https://www.viralnote.app/mcp.md
- **Docs MCP server:** `https://www.viralnote.app/mcp/docs` (no auth)
- **Agent skill:** https://github.com/viralnote/viralnote-skill
- **Source:** https://github.com/viralnote/mcp-server · https://github.com/viralnote/claude-plugin · https://github.com/viralnote
- **Scoped context:** https://www.viralnote.app/developers/llms.txt

## Endpoints (v1)

| Method | Path | Purpose |
|--------|------|---------|
| GET | /health | Liveness check, no auth |
| GET/POST | /brands | List or create brands |
| GET/POST | /posts | List or create posts (draft or scheduled) |
| GET/PATCH/DELETE | /posts/{postId} | Read, update, delete a post |
| POST | /posts/{postId}/publish | Publish now |
| GET | /social-accounts | Connected accounts |
| GET/POST | /media, POST /media/import, DELETE /media/{mediaId} | Media library |
| GET | /analytics | Engagement metrics |
| GET/POST/PATCH/DELETE | /webhooks | Webhook subscriptions |
| GET/POST | /api-keys | Manage keys (session auth only) |
| GET | /credits, GET /credits/transactions, POST /credits/estimate | Processing credits |
| POST | /youtube, /article, /text | Generate post drafts from a source |
| GET/POST | /brand, POST /brand/import | Brand voice profile |

## Errors

Every error is JSON: `{ "error": { "code": "...", "message": "..." }, "requestId": "..." }`. Codes include `unauthorized`, `validation-error`, `rate-limit` (with `Retry-After`), `payment_required` (with `upgrade` URL), `media-error`, `server-error`. Unauthenticated requests get a 401 with `WWW-Authenticate: Bearer resource_metadata="..."` pointing at the RFC 9728 metadata.

## Rate limits

Per key, per minute, configurable when the key is created (default 60 requests/minute; publish endpoints lower). 429 responses carry `Retry-After`.

---

Site index for agents: https://www.viralnote.app/llms.txt · Structured view: https://www.viralnote.app/agent.json · API: https://www.viralnote.app/openapi.json · Auth: https://www.viralnote.app/auth.md
