Echo Documentation
The agent-native content engine: brand-first content marketing your agents call over MCP or the CLI.
Quickstart
- Create an account and start your 14-day free trial (card required, no charge until the trial ends).
- Connect your agent — add a custom connector in Claude, ChatGPT, or Cursor with this URL and authenticate when prompted:
https://echo.wotai.co/api/mcp - Or use an API key — mint one on /welcome and send it as the
x-api-keyheader (CLI, scripts, CI). - Set up your brand — ask your agent to call
brand-config.createwith your brand's voice and messaging. Every other capability references it.
Authentication
MCP connector (OAuth 2.1 + PKCE): for agents. Adding the connector by URL triggers a browser sign-in and consent; the granted scopes below bound what the agent can call. Your organization is bound into the token automatically.
API key (x-api-key): for the CLI and automation. Keys are shown once, stored hashed, carry your organization, and get the full capability set.
Both paths hit the same endpoint and meter against the same organization quota.
Capabilities (19)
| Tool | Scope | What it does |
|---|---|---|
brand-config.create | write:generate | Create a brand (voice, messaging, audience). Returns a `brandId` — pass it as `brandId` to every brand-scoped capability (Brand DNA, audits, content). Subject to your plan's brand-config cap. |
brand-config.list | read:intelligence | List your organization's brands — each with its `brandId` (pass to brand-scoped capabilities), slug, and creation date. |
usage.get | read:intelligence | Check your engine-call usage: plan, calls used, limit, remaining, and when the period resets. Never spends a call. |
report.list | read:intelligence | List your organization's stored reports (DNAs, audits, generated content), newest first. |
report.get | read:intelligence | Fetch one stored report by the generationId a capability returned. A failed run also carries a machine-readable `runError` ({ code, retryable, message }) — check `retryable` to decide whether re-running may succeed. |
brand-dnabrand-scoped | read:intelligence | Generate a brand's core identity profile (returns a report). |
audience-dnabrand-scoped | read:intelligence | Generate target-audience profiles for a brand (returns a report). |
competitor-dnabrand-scoped | read:intelligence | Generate a competitive analysis for a brand (returns a report). |
seo-auditbrand-scoped | read:intelligence | Run an SEO audit for a website (returns a report). |
tech-auditbrand-scoped | read:intelligence | Run a technical SEO audit for a website (returns a report). |
backlink-auditbrand-scoped | read:intelligence | Run a backlink audit for a website (returns a report). |
social-auditbrand-scoped | read:intelligence | Run a social-presence audit for a website (returns a report). |
local-seo-auditbrand-scoped | read:intelligence | Run a local-SEO audit for a business (returns a report). |
content-performance-auditbrand-scoped | read:intelligence | Run a content-performance audit for a website (returns a report). |
pillar-generationbrand-scoped | write:generate | Generate an SEO-optimized pillar page from a source URL (returns a draft). |
idea-generationbrand-scoped | write:generate | Generate content ideas for an audience segment (returns ideas). |
social-media-generationbrand-scoped | write:generate | Generate social-media posts from a content idea (returns posts). |
blog-generationbrand-scoped | write:generate | Generate a brand-aligned blog post (returns a finished draft). |
keyword-researchbrand-scoped | read:intelligence | Look up ranked keywords for a domain, stored against one of your brands (returns keyword data). |
Brand configs
A brand config is the typed document every capability runs against — voice, messaging, audience, and publishing rules, referenced by a kebab-case slug. Create one with brand-config.create; your plan caps how many you can have (see plans below).
The document is validated on create with per-field issues returned for anything missing. It requires meta.schema_version ("v1" or "v1.1"), a kebab-case meta.brand_id, and 14 top-level sections: meta, identity, voice, banned_phrasings, naming, tokens, post_schema, surfaces, publishing_pipeline, pre_publish_overrides, keyword_universe, cover_image_overrides, cross_references, and internal_link_targets. Your agent can iterate on the validation issues until the document passes.
Plans, metering, and caps
| Plan | Engine calls / mo | Brand configs |
|---|---|---|
| solo | 500 | 1 |
| starter | 1,000 | 3 |
| growth | 5,000 | 10 |
| scale | 20,000 | 30 |
Every call meters against your organization with hard spend caps. Usage is attributed per brand config. Manage, change plan, or cancel from /welcome → Manage subscription.
Error codes
UNAUTHENTICATED — No valid credential. Connect via OAuth or send a valid x-api-key. A credential-less tools/call also gets an HTTP 401 with a WWW-Authenticate challenge so MCP hosts can start OAuth.
ENTITLEMENT_DENIED — Your subscription does not grant this call (no active plan, or the capability is outside your plan). Start or fix your subscription on /welcome.
RATE_LIMITED — Quota or spend cap reached for the current billing period. Retry after the window resets, or upgrade.
NOT_FOUND — The brand or resource does not exist for YOUR organization. Cross-tenant lookups return the same 404 (no existence probing).
BRAND_CONFIG_CAP_EXCEEDED — Your plan's brand-config limit is reached. The error carries limit and current; upgrade to add more brands.
NO_ORGANIZATION — Your credential is not bound to an organization. Re-mint your API key from /welcome or reconnect the OAuth connector.
VALIDATION_ERROR — Input failed schema validation. The error lists per-field issues your agent can fix and retry.
Pricing and product overview: wotai.co/products/echo