# 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.

| Fact | Value | Source |
| --- | --- | --- |
| Request | `POST https://www.rainbrand.com/api/v1/briefs, then GET /briefs/{id}` | [docs](https://docs.rainbrand.com/api-reference/briefs/request-a-brief) |
| Context | Maintained: prepared from sources added for the brand | |
| Auth | Send the API key in the x-api-key header. | [source](https://docs.rainbrand.com/api/authentication), 11 November 2026 |
| Pin a version | Not published | [source](https://docs.rainbrand.com/api-reference/briefs/request-a-brief), 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](https://www.rainbrand.com/pricing), 11 November 2026 |
| Over MCP | The MCP tool create_brief prepares brand guidance and assets for a task. | [source](https://docs.rainbrand.com/mcp/tools), 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

```bash
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 MCP` (Rainbrand Brief)

```json
{
  "brief_id": "eda2b032-0268-4902-b610-45e7ae928caa",
  "status": "completed",
  "skill_id": "e16b6239-d74f-4922-97c1-d65c6ae3d882",
  "created_at": "2026-11-12T00:00:04.667Z",
  "completed_at": "2026-11-12T00:00:46.716Z",
  "guidance": "## Linear Loops hero — pinned brand context …",
  "assets": [
    { "kind": "font", "media_type": "font/woff2", … },
    { "kind": "logo", "media_type": "image/png", … },
    { "kind": "image", "media_type": "image/png",
      "url": "https://www.rainbrand.com/assets/AgHtor…" },
    { "kind": "font_render", "media_type": "image/png", … }
  ]
}
```

1. `skill_id`: The Brand Skill version that this Brief came from.
2. `completed_at`: 42 seconds after the request.
3. `guidance`: Markdown written for this task. Sections below.
4. `kind`: A monochrome icon for the dark section.
5. `url`: The Rainbrand docs: a stable link with no expiry.

Over REST, the same Brief comes back inside `data`, with camelCase keys (`skillId`, `mediaType`, `createdAt`). The full response is in [/data.json](https://brandcontextapi.com/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](https://brandcontextapi.com/fields/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](https://www.rainbrand.com/pricing) shows what each plan includes. The [API quickstart](https://docs.rainbrand.com/api/quickstart?utm_source=brandcontextapi.com&utm_medium=satellite&utm_campaign=entry-brief) shows how to add a brand and request a Brief. The [live OpenAPI spec](https://www.rainbrand.com/api/v1/spec.json?utm_source=brandcontextapi.com&utm_medium=satellite&utm_campaign=entry-brief) has the request and response schemas. Over MCP, the tools are `create_brief` and `get_brief`, at `mcp.rainbrand.com/mcp`.

---

Source: https://brandcontextapi.com/responses/rainbrand-brief
Last updated: 2026-11-12
Published by The Brand Object. The Brand Object is run by Rainbrand, which makes two of the endpoints described here. Their pages follow the same rules as the others.
