---
title: brand_resolve
description: Find the brands whose context applies to an ad account.
---

Ask for work on an ad account. The agent first finds the brands that apply to that ad account.

> "Write three headlines for our Meta ad account."

The agent finds the ad account with [`list_advertisers`](/mcp/tools/list-advertisers), and then calls `brand_resolve`. It gets each brand that applies, and it reads that brand with [`brand_get`](/mcp/tools/brand-get). You then get headlines in the voice of that brand.

The job guide [Describe a brand](/mcp/tools/describe-a-brand) shows each step of the job.

## Reference

Given an ad account, find which brands' context applies to it — call this before writing copy or judging performance for that account, so you know who you are acting for. Returns every applicable brand rather than guessing one: an account can carry more than one. Then load the context with brand_get.

### Input

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `advertiser_id` | string | yes | The ad account id (`acc_…`). Discover ids with list_advertisers. |

### Output

A successful call returns this object in `structuredContent`.

| Field | Type | Always present | Description |
| --- | --- | --- | --- |
| `brands` | array of object | yes | Each brand whose context applies to the ad account, with no rank. An empty list when no brand is attached. |
| `brands[].brandName` | string | yes | The display name of the brand. |
| `brands[].brandSlug` | string | yes | The handle of the brand. Send it to `brand_get` as `brand_name`. |
| `brands[].via` | object | yes | How the brand applies to the ad account. |
| `brands[].via.kind` | one of `direct`, `target` | yes | `direct` when the ad account is attached to the brand itself. `target` when it is attached to a record of the brand. |
| `brands[].via.targetId` | string | no | The id of that record. Present only when `kind` is `target`. |
| `brands[].via.targetType` | string | no | The kind of that record. Present only when `kind` is `target`. |

### Failure codes

A failed call has `isError` set, and `structuredContent.error` holds one of these codes. [Errors](/mcp/errors) describes the shape of a failed call.

- `forbidden`
- `invalid_request`
- `internal_error`

### Scope

The token must hold `brand:read`. [Auth & scopes](/mcp/auth) lists each scope.

### Annotations

A client reads these hints. A hint that the tool does not declare has the default value of the MCP specification.

- **Read-only.** The tool changes nothing.
- **Closed world.** The tool reads and writes the data of AdCrunch only.

### Example

The arguments:

```json
{
  "advertiser_id": "acc_1203456789012345"
}
```

The result, in `structuredContent`:

```json
{
  "brands": [
    {
      "brandName": "Acme",
      "brandSlug": "acme",
      "via": {
        "kind": "direct"
      }
    }
  ]
}
```
