The Brand Object

Rainbrand Brief

The request and response of a Rainbrand Brief for a Linear task: guidance written for the task, the assets selected, the version used, failures, plans.

Request
POST https://www.rainbrand.com/api/v1/briefs, then GET /briefs/{id}
Context
Maintained: prepared from sources added for the brand
Auth
Send the API key in the x-api-key header. source, read 11 November 2026
Pin a version
Not published source, read 11 November 2026
Plans
As of 11 November 2026, new Rainbrand accounts get a one-time free grant that includes one brand, and the cheapest paid plan, Plus, is $20 a month billed monthly. API and MCP access are included in every plan. source, read 11 November 2026
Over MCP
The MCP tool create_brief prepares brand guidance and assets for a task. source, read 11 November 2026
Sample
linear.app, requested 11 November 2026

A Brief is the guidance and assets that Rainbrand selects from a brand for one task. You send the brand and a plain description of the task. When the Brief is ready, it returns Markdown guidance written for that task and the files chosen for it. It also returns the Brand Skill version that it came from. The caller still writes the prompt and chooses the model. A Brief works only for brands that someone added to Rainbrand, so it is not a lookup for any domain.

The request

curl https://www.rainbrand.com/api/v1/briefs \
  -H "x-api-key: $RAINBRAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"brandSessionId": "<brand ID>", "task": "Today is November 11, 2026. A hero section for a Linear landing page announcing Loops …"}'

curl "https://www.rainbrand.com/api/v1/briefs/<brief ID>?wait=true" \
  -H "x-api-key: $RAINBRAND_API_KEY"

Request a Brief answers 202 with the ID of the Brief. Get a Brief with wait=true keeps the connection open until the Brief is done, for up to 295 seconds (120 by default). You can also poll while status is pending or processing. An idempotency-key header makes retries safe.

We made the same request over the Rainbrand Model Context Protocol (MCP) server, with create_brief and get_brief. The request was for a Linear brand added from linear.app on 15 October 2026. On 11 November, we added the Linear page that announced Loops to the brand. Then we requested this Brief. This was our full task: "Today is November 11, 2026. A hero section for a Linear landing page announcing Loops (recurring workflows for Linear Agent): a headline, a one-line subhead, a call to action, and one product image, on a dark section of linear.app. The copy and image will be generated by a model, so include what it must not claim."

The response

get_brief over MCPRainbrand Brief
{
"brief_id": "eda2b032-0268-4902-b610-45e7ae928caa",
"status": "completed",
"skill_id": "e16b6239-d74f-4922-97c1-d65c6ae3d882",1The Brand Skill version that this Brief came from.
"created_at": "2026-11-12T00:00:04.667Z",
"completed_at": "2026-11-12T00:00:46.716Z",242 seconds after the request.
"guidance": "## Linear Loops hero — pinned brand context …",3Markdown written for this task. Sections below.
"assets": [
{ "kind": "font", "media_type": "font/woff2", … },
{ "kind": "logo", "media_type": "image/png", … },4A monochrome icon for the dark section.
{ "kind": "image", "media_type": "image/png",
"url": "https://www.rainbrand.com/assets/AgHtor…" },5The Rainbrand docs: a stable link with no expiry.
{ "kind": "font_render", "media_type": "image/png", … }
]
}

Over REST, the same Brief comes back inside data, with camelCase keys (skillId, mediaType, createdAt). The full response is in /data.json under responses.rainbrand-brief.

The guidance had three sections:

  • Copy and factual guardrails: "plain, direct, purposeful, concise, confident but not inflated". It quoted the Loops announcement as the limit for claims: "Loops let you define scheduled or event-driven operations for Linear Agent to run across your workspace." Loops launched on 20 July 2026, so the copy must not call it "newly launched, upcoming, or a first-time release". It listed what not to claim: "integrations, pricing, availability/access, setup, permissions, performance, outcomes, or degree of autonomy". Spell the names "Linear" and "Linear Agent", never "linear" or "Linear app".
  • Dark website styling: background #08090A, text #F7F8F8, a "restrained violet accent" #7170FF, cards #0F1011, and a button #E5E5E6 with dark text. Inter Variable at 510 for headings and 400 for body. On the dark section, use a monochrome mark, not the black lockup.
  • Generated product image: one screenshot of the Linear Agent tasks interface, as "visual/product-language reference only". It "is not evidence of Loops’ actual interface".

The four assets were the Inter Variable font, an image of the font, a monochrome Linear icon, and the screenshot.

What is not in it?

  • A way to choose the version is not in it. In the REST reference that we read on 11 November 2026, Request a Brief takes only brandSessionId and task. We found no field to choose a Brand Skill version. The Brief records the version that it used in skillId.
  • Content that the task did not need is not in it. This Brief selected no competitors or prices.
  • Facts that are not in the sources of the brand are not in it. Before we added the Loops announcement, a Brief for this task said that the sources had "no Loops documentation". See Dates and versions.
  • The date is not in it unless the task gives it. A minute before this Brief, we requested one without the date. That Brief took the current date to be 10 July 2025, and it called the July 2026 launch of Loops a future event. Put the date in the task.
  • A definition of inline is not in it. The field is in the MCP response and in the example in the docs, but no page that we read defines it.

Empty and failed responses

Status Code What it means
401 UNAUTHORIZED The credentials are missing or not valid
402 INSUFFICIENT_CREDITS Not enough credits. data says how many are needed
403 FORBIDDEN, FEATURE_NOT_AVAILABLE The plan needs an upgrade, or Briefs are not enabled for the integration
404 BRAND_NOT_FOUND, BRIEF_NOT_FOUND The brand or the Brief does not exist
409 BRAND_SKILL_UNAVAILABLE The brand is not ready for Briefs yet
409 IDEMPOTENCY_CONFLICT The idempotency key was used with a different request
429 TOO_MANY_REQUESTS Rate limit. Wait for Retry-After

If a Brief fails after it starts, it has status: failed and a data.error. The error has a code, a message, and a field that says if a retry can work. The Rainbrand docs say to branch on error.code, not on the HTTP status alone.

Plans

As of 11 November 2026, new Rainbrand accounts get a one-time free grant that includes one brand. The cheapest paid plan, Plus, is $20 a month. API and MCP access are included in every plan. A Brief needs a brand that someone added first. Rainbrand's pricing page shows what each plan includes. The API quickstart shows how to add a brand and request a Brief. The live OpenAPI spec has the request and response schemas. Over MCP, the tools are create_brief and get_brief, at mcp.rainbrand.com/mcp.

Last updated 12 November 2026