> ## Documentation Index
> Fetch the complete documentation index at: https://www.adjar.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Asset Config Reference

Assets are reusable pieces of ad content — sitelinks, callouts, and structured snippets — that live once in a shared library and attach to your account or individual campaigns by reference. Defining them in one place (conventionally `assets.toml`) means a single edit updates every ad that uses the asset, and your [account root](/docs/config/google/account) and [campaigns](/docs/config/google/campaigns) only ever refer to assets by a short ID instead of repeating their content.

## Full Example

```toml theme={null}
[[assets]]
key = "sl-pricing"
type = "SITELINK"
link_text = "Pricing"
description1 = "Simple per-seat plans"
description2 = "No hidden fees"
final_url = "https://www.example.com/pricing"

[[assets]]
key = "co-soc2"
type = "CALLOUT"
callout_text = "SOC 2 Type II"

[[assets]]
key = "ss-product-types"
type = "STRUCTURED_SNIPPET"
header = "Types"
values = [ "SQL Review", "Data Masking", "Access Control" ]
```

***

## Referencing Assets

Each asset is attached elsewhere by ID. Attachments are lists of strings in `[account]` or `[[campaigns]]` (`sitelinks`, `callouts`, `structured_snippets`) that point back into this library.

A reference matches **either** of two identifiers:

<ParamField path="id" type="string">
  The Google-issued asset ID. Adjar writes this back automatically after it creates the asset — you normally don't author it by hand.
</ParamField>

<ParamField path="key" type="string">
  An optional local alias you choose (e.g. `"sl-pricing"`). Use a `key` so a brand-new asset — one that has no `id` yet — can still be referenced from an attachment list and be created and linked in a single `apply`. Keys must be unique within the library.

  Keep keys short and descriptive (`sl-pricing`, `co-free-trial`, `ss-product-types`) so both you and your AI agent can reference them unambiguously.
</ParamField>

<Note>
  Give every asset a `key`. Without one, an asset that has not yet been created (no `id`) cannot be attached, because there is nothing stable to reference it by.
</Note>

Assets are mutable: editing an asset's content is an in-place update on the next `apply`, not a recreate, so the asset keeps its ID and stays attached.

***

## `[[assets]]` — common fields

Every asset entry carries these, plus the type-specific fields below.

<ParamField path="type" type="string" required>
  The asset type. Determines which content fields apply.

  | Value                  | Description                                                              |
  | ---------------------- | ------------------------------------------------------------------------ |
  | `"SITELINK"`           | An extra link beneath the ad, with its own URL and optional descriptions |
  | `"CALLOUT"`            | A short, non-clickable highlight phrase                                  |
  | `"STRUCTURED_SNIPPET"` | A header plus a list of related values                                   |
</ParamField>

***

## `SITELINK`

A sitelink adds a clickable link below your ad, pointing to a specific landing page.

<ParamField path="link_text" type="string" required>
  The clickable link text. **Maximum 25 characters.**
</ParamField>

<ParamField path="description1" type="string">
  Optional first description line shown under the link in some placements. **Maximum 35 characters.**
</ParamField>

<ParamField path="description2" type="string">
  Optional second description line. **Maximum 35 characters.** Supply both description lines or neither.
</ParamField>

<ParamField path="final_url" type="string" required>
  The landing page URL the sitelink points to.

  ```toml theme={null}
  [[assets]]
  key = "sl-pricing"
  type = "SITELINK"
  link_text = "Pricing"
  description1 = "Simple per-seat plans"
  description2 = "No hidden fees"
  final_url = "https://www.example.com/pricing"
  ```
</ParamField>

***

## `CALLOUT`

A callout is a short phrase that highlights a selling point. Callouts are not clickable.

<ParamField path="callout_text" type="string" required>
  The callout phrase. **Maximum 25 characters.**

  ```toml theme={null}
  [[assets]]
  key = "co-soc2"
  type = "CALLOUT"
  callout_text = "SOC 2 Type II"
  ```
</ParamField>

***

## `STRUCTURED_SNIPPET`

A structured snippet pairs a predefined header with a list of related values, e.g. *Types: SQL Review, Data Masking, Access Control*.

<ParamField path="header" type="string" required>
  The snippet header. Must be one of Google's predefined values (validated against the account's language). Adjar accepts the English set:

  `Amenities`, `Brands`, `Courses`, `Degree programs`, `Destinations`, `Featured hotels`, `Insurance coverage`, `Models`, `Neighborhoods`, `Service catalog`, `Services`, `Shows`, `Styles`, `Types`.

  <Note>
    Despite some older Google documentation, `Features` is **not** an accepted header; use `Services` or `Types` instead.
  </Note>
</ParamField>

<ParamField path="values" type="array of strings" required>
  The snippet values. **3–10 values, each a maximum of 25 characters.**

  ```toml theme={null}
  [[assets]]
  key = "ss-product-types"
  type = "STRUCTURED_SNIPPET"
  header = "Types"
  values = [ "SQL Review", "Data Masking", "Access Control" ]
  ```
</ParamField>

***

## Related Pages

* [Account Root](/docs/config/google/account) — attaching assets account-wide
* [Campaigns](/docs/config/google/campaigns) — attaching assets per campaign and how override vs. inherit resolves
