Battlecard Studio
API

Two on-ramps. One credit wallet.

Ounie accounts hit the REST endpoints with a bearer token. AI assistants — including the Ounie AI Team — connect over MCP and get a native tool surface. Both run the same generation pipeline, and every call draws your shared Ounie credits (1 credit = 1¢), never overdrawing. Battle cards are grounded in your private Ounie brain, so there is no keyless x402 rail.

Authentication

App key bcd_live_…
Minted at /dashboard/api-keys(up to 5 active). Reads, lists, exports, edits, and shares your cards. Cannot reach your private brain, so it can't generate/refresh — those return a clear 403.
Authorization: Bearer bcd_live_…

# Header-less client? append the key to the URL:
…/api/cards?api_key=bcd_live_…
Fleet master key ounie_live_…
Your ounie.com developer key (enable app access in ounie.com settings). It's forwarded upstream so generation grounds in your brains — this is what the Ounie AI Team uses. Works everywhere a bcd_live_ key works, plus generate/refresh.
Authorization: Bearer ounie_live_…

# or ?api_key=ounie_live_…

The dashboard uses your .ounie.com session cookie — the same REST endpoints accept it, so browser and agent share one surface. A bogus or expired token gets a plain 401 (never a redirect).

MCP · for AI assistants and the Ounie AI Team
Streamable HTTP at /api/mcp (legacy SSE at /api/sse). Auth with a bcd_live_… key or the master key ounie_live_….
Endpoint  https://battlecards.ounie.com/api/mcp
Header    Authorization: Bearer bcd_live_…

# If your MCP client can't set headers, append the key as a query param:
https://battlecards.ounie.com/api/mcp?api_key=bcd_live_…
ToolWhat it doesCost
list_cardsList your battle cards (competitor, our side, share status).free
get_cardOne battle card in full, by id (all sections + citations).free
export_cardA card as a self-contained Markdown document (linked citations).free
list_brainsYour Ounie brains, to ground cards in. Needs the master key.free
generate_cardBuild a card per competitor, grounded in your brain. Needs the master key.5 credits / card produced
refresh_cardRe-crawl a competitor + regenerate a card in place. Needs the master key.5 credits
share_cardTurn a card's public share page on/off; returns the URL.free
get_credit_balanceSpendable Ounie credits + monthly included.free
get_pricingPer-action pricing. No auth required.public
whoamiThe authenticated key's owner + whether it can ground.free
REST endpoints
The same routes the dashboard calls. Bearer token or session cookie; JSON in, JSON out.
GET
/api/cards
← { "cards": [ { "id", "competitor_name", "competitor_url", "our_name", "share_token", "card", … } ] }

List your cards. Works with any key.

POST
/api/cards
→ { "brain_ids": ["<uuid>"], "our_name": "Acme", "competitor_urls": ["https://rival.com"] }
← { "ok": true, "created": [{ "id", "competitor", "competitor_url" }], "cards_generated", "skipped", "credits_spent" }

Generate a card per competitor. Brain-grounded → needs a session cookie or the master key (ounie_live_…); a bcd_live_ app key gets 403 grounding_requires_master_key. 5 credits per card actually produced; skips are free.

GET
/api/cards/{id}
← { "card": { …full card… } }

One card (owner only). Works with any key.

POST
/api/cards/{id}/refresh
← { "ok": true, "credits_spent": 5 }

Re-crawl + regenerate in place. Needs the master key (grounded). 5 credits, only if a card is produced.

PATCH
/api/cards/{id}/content
→ { "positioning", "we_win": [...], "they_win": [...], "objections": [...], "landmines": [...], "discovery_questions": [...], "pricing_note" }
← { "ok": true }

Edit the card's wording (rep-tuned). Free. Works with any key.

POST
/api/cards/{id}/share
← { "ok": true, "token": "…" }  →  share at /c/{token}

Turn the public share page on (mint a token). Free.

DELETE
/api/cards/{id}/share
← { "ok": true }

Turn the share page off. Free.

GET
/api/brains
← { "brains": [ { "id", "name", "slug", "sourceCount" } ] }

Your Ounie brains. Grounded read → session cookie or master key.

DELETE
/api/cards/{id}
← { "ok": true }

Delete a card. Works with any key.

Connect the Ounie AI Team
Add Battlecard Studio as an HTTP MCP server in your Team's config.
{
  "mcpServers": {
    "battlecards": {
      "url": "https://battlecards.ounie.com/api/mcp?api_key=ounie_live_…"
    }
  }
}

The Team can't set request headers on an HTTP MCP entry, so the key rides the URL as ?api_key=. Pass your master key (ounie_live_…) so generation grounds in your brain.

Credits & billing
One shared Ounie wallet, whole credits (1 = 1¢).

5 credits per card actually produced (generate or refresh). Sites we can't read are skipped free; you're refunded for skips.

Listing, reading, exporting, editing, and sharing are free.

A run short on credits is refused with 402 + a buy_credits_url — an agent can never overdraw.

Buy credits on ounie.com.

No keyless x402

Battle cards are grounded in your private Ounie brain, so there is no anonymous pay-per-call rail. Agent access is API keys / MCP, billed to your shared Ounie credits.