or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

ad-management.mdasset-management.mdaudience-management.mdbatch-operations.mdcampaign-management.mdclient-setup.mdconversion-tracking.mdindex.mdreporting-search.mdtargeting-keywords.md

asset-management.mddocs/

0

# Asset Management

1

2

Creative asset management including image, video, and text asset uploading, asset group management, and asset performance optimization. The Google Ads API provides comprehensive asset management capabilities for Performance Max campaigns, responsive ads, and creative optimization.

3

4

## Capabilities

5

6

### Asset Operations

7

8

Core asset management operations for creating, uploading, and managing creative assets including images, videos, text, and other media types used across Google Ads campaigns.

9

10

```python { .api }

11

def mutate_assets(

12

self,

13

request: Optional[MutateAssetsRequest] = None,

14

customer_id: Optional[str] = None,

15

operations: Optional[Sequence[AssetOperation]] = None,

16

partial_failure: bool = False,

17

validate_only: bool = False,

18

response_content_type: Optional[ResponseContentTypeEnum.ResponseContentType] = None

19

) -> MutateAssetsResponse:

20

"""

21

Create, update, or remove assets.

22

23

Args:

24

request: The request object containing all parameters

25

customer_id: Required customer ID for the account

26

operations: List of asset operations to perform

27

partial_failure: Continue processing on individual failures

28

validate_only: Validate operations without executing

29

response_content_type: Type of response content to return

30

31

Returns:

32

MutateAssetsResponse with operation results

33

"""

34

35

def get_asset(

36

self,

37

request: Optional[GetAssetRequest] = None,

38

resource_name: Optional[str] = None

39

) -> Asset:

40

"""

41

Retrieve an asset by resource name.

42

43

Args:

44

request: The request object

45

resource_name: Asset resource name (customers/{customer_id}/assets/{asset_id})

46

47

Returns:

48

Asset resource object

49

"""

50

```

51

52

### Asset Group Operations

53

54

Asset group management for organizing and managing collections of assets used in Performance Max campaigns and other automated campaign types.

55

56

```python { .api }

57

def mutate_asset_groups(

58

self,

59

request: Optional[MutateAssetGroupsRequest] = None,

60

customer_id: Optional[str] = None,

61

operations: Optional[Sequence[AssetGroupOperation]] = None,

62

partial_failure: bool = False,

63

validate_only: bool = False,

64

response_content_type: Optional[ResponseContentTypeEnum.ResponseContentType] = None

65

) -> MutateAssetGroupsResponse:

66

"""

67

Create, update, or remove asset groups.

68

69

Args:

70

request: The request object

71

customer_id: Required customer ID

72

operations: List of asset group operations

73

partial_failure: Continue on individual failures

74

validate_only: Validate without executing

75

response_content_type: Response content type

76

77

Returns:

78

MutateAssetGroupsResponse with results

79

"""

80

81

def get_asset_group(

82

self,

83

request: Optional[GetAssetGroupRequest] = None,

84

resource_name: Optional[str] = None

85

) -> AssetGroup:

86

"""

87

Retrieve an asset group by resource name.

88

89

Args:

90

request: The request object

91

resource_name: Asset group resource name

92

93

Returns:

94

AssetGroup resource object

95

"""

96

```

97

98

### Asset Group Asset Operations

99

100

Asset group asset association operations for linking individual assets to asset groups with specific field type assignments and performance tracking.

101

102

```python { .api }

103

def mutate_asset_group_assets(

104

self,

105

request: Optional[MutateAssetGroupAssetsRequest] = None,

106

customer_id: Optional[str] = None,

107

operations: Optional[Sequence[AssetGroupAssetOperation]] = None,

108

partial_failure: bool = False,

109

validate_only: bool = False,

110

response_content_type: Optional[ResponseContentTypeEnum.ResponseContentType] = None

111

) -> MutateAssetGroupAssetsResponse:

112

"""

113

Create, update, or remove asset group assets.

114

115

Args:

116

request: The request object

117

customer_id: Required customer ID

118

operations: List of asset group asset operations

119

partial_failure: Continue on individual failures

120

validate_only: Validate without executing

121

response_content_type: Response content type

122

123

Returns:

124

MutateAssetGroupAssetsResponse with results

125

"""

126

```

127

128

### Asset Set Operations

129

130

Asset set management for creating and managing collections of related assets that can be shared across multiple campaigns and asset groups.

131

132

```python { .api }

133

def mutate_asset_sets(

134

self,

135

request: Optional[MutateAssetSetsRequest] = None,

136

customer_id: Optional[str] = None,

137

operations: Optional[Sequence[AssetSetOperation]] = None,

138

partial_failure: bool = False,

139

validate_only: bool = False,

140

response_content_type: Optional[ResponseContentTypeEnum.ResponseContentType] = None

141

) -> MutateAssetSetsResponse:

142

"""

143

Create, update, or remove asset sets.

144

145

Args:

146

request: The request object

147

customer_id: Required customer ID

148

operations: List of asset set operations

149

partial_failure: Continue on individual failures

150

validate_only: Validate without executing

151

response_content_type: Response content type

152

153

Returns:

154

MutateAssetSetsResponse with results

155

"""

156

157

def mutate_asset_set_assets(

158

self,

159

request: Optional[MutateAssetSetAssetsRequest] = None,

160

customer_id: Optional[str] = None,

161

operations: Optional[Sequence[AssetSetAssetOperation]] = None,

162

partial_failure: bool = False,

163

validate_only: bool = False,

164

response_content_type: Optional[ResponseContentTypeEnum.ResponseContentType] = None

165

) -> MutateAssetSetAssetsResponse:

166

"""

167

Create, update, or remove asset set assets.

168

169

Args:

170

request: The request object

171

customer_id: Required customer ID

172

operations: List of asset set asset operations

173

partial_failure: Continue on individual failures

174

validate_only: Validate without executing

175

response_content_type: Response content type

176

177

Returns:

178

MutateAssetSetAssetsResponse with results

179

"""

180

```

181

182

## Asset Creation Examples

183

184

### Upload Image Asset

185

186

```python

187

import base64

188

from google.ads.googleads.client import GoogleAdsClient

189

from google.ads.googleads.errors import GoogleAdsException

190

191

def upload_image_asset(client, customer_id, image_path, asset_name):

192

"""Upload an image asset from a local file."""

193

194

asset_service = client.get_service("AssetService")

195

196

# Read and encode image file

197

with open(image_path, 'rb') as image_file:

198

image_data = image_file.read()

199

200

# Create asset operation

201

operation = client.get_type("AssetOperation")

202

asset = operation.create

203

asset.name = asset_name

204

asset.type_ = client.enums.AssetTypeEnum.IMAGE

205

206

# Set image asset details

207

image_asset = asset.image_asset

208

image_asset.data = image_data

209

image_asset.mime_type = client.enums.MimeTypeEnum.IMAGE_JPEG # or IMAGE_PNG

210

211

try:

212

response = asset_service.mutate_assets(

213

customer_id=customer_id,

214

operations=[operation]

215

)

216

217

asset_resource_name = response.results[0].resource_name

218

print(f"Uploaded image asset: {asset_resource_name}")

219

return asset_resource_name

220

221

except GoogleAdsException as ex:

222

print(f"Request failed with status {ex.error.code().name}")

223

for error in ex.failure.errors:

224

print(f"Error: {error.message}")

225

return None

226

```

227

228

### Upload Video Asset

229

230

```python

231

def upload_video_asset(client, customer_id, youtube_video_id, asset_name):

232

"""Create a video asset from a YouTube video."""

233

234

asset_service = client.get_service("AssetService")

235

236

operation = client.get_type("AssetOperation")

237

asset = operation.create

238

asset.name = asset_name

239

asset.type_ = client.enums.AssetTypeEnum.YOUTUBE_VIDEO

240

241

# Set YouTube video asset details

242

youtube_video_asset = asset.youtube_video_asset

243

youtube_video_asset.youtube_video_id = youtube_video_id

244

youtube_video_asset.youtube_video_title = asset_name

245

246

try:

247

response = asset_service.mutate_assets(

248

customer_id=customer_id,

249

operations=[operation]

250

)

251

252

return response.results[0].resource_name

253

254

except GoogleAdsException as ex:

255

print(f"Video asset creation failed: {ex.error.code().name}")

256

for error in ex.failure.errors:

257

print(f"Error: {error.message}")

258

return None

259

```

260

261

### Create Text Asset

262

263

```python

264

def create_text_asset(client, customer_id, text_content, asset_name):

265

"""Create a text asset for headlines, descriptions, etc."""

266

267

asset_service = client.get_service("AssetService")

268

269

operation = client.get_type("AssetOperation")

270

asset = operation.create

271

asset.name = asset_name

272

asset.type_ = client.enums.AssetTypeEnum.TEXT

273

274

# Set text asset details

275

text_asset = asset.text_asset

276

text_asset.text = text_content

277

278

response = asset_service.mutate_assets(

279

customer_id=customer_id,

280

operations=[operation]

281

)

282

283

return response.results[0].resource_name

284

285

# Example usage

286

text_assets = [

287

"Premium Quality Products",

288

"Free Shipping Worldwide",

289

"Shop Now and Save Big",

290

"Discover amazing deals on our latest collection of premium products"

291

]

292

293

headline_assets = []

294

for i, text in enumerate(text_assets[:3]): # First 3 for headlines

295

asset_resource = create_text_asset(

296

client,

297

customer_id,

298

text,

299

f"Headline {i+1}"

300

)

301

headline_assets.append(asset_resource)

302

303

description_asset = create_text_asset(

304

client,

305

customer_id,

306

text_assets[3], # Last one for description

307

"Description 1"

308

)

309

```

310

311

### Create Logo Asset

312

313

```python

314

def upload_logo_asset(client, customer_id, logo_path, asset_name):

315

"""Upload a logo asset for display campaigns."""

316

317

asset_service = client.get_service("AssetService")

318

319

with open(logo_path, 'rb') as logo_file:

320

logo_data = logo_file.read()

321

322

operation = client.get_type("AssetOperation")

323

asset = operation.create

324

asset.name = asset_name

325

asset.type_ = client.enums.AssetTypeEnum.IMAGE

326

327

# Set image asset with logo specifications

328

image_asset = asset.image_asset

329

image_asset.data = logo_data

330

image_asset.mime_type = client.enums.MimeTypeEnum.IMAGE_PNG

331

332

response = asset_service.mutate_assets(

333

customer_id=customer_id,

334

operations=[operation]

335

)

336

337

return response.results[0].resource_name

338

```

339

340

## Asset Group Examples

341

342

### Create Asset Group for Performance Max

343

344

```python

345

def create_performance_max_asset_group(client, customer_id, campaign_resource_name, asset_group_name, final_urls):

346

"""Create an asset group for Performance Max campaign."""

347

348

asset_group_service = client.get_service("AssetGroupService")

349

350

operation = client.get_type("AssetGroupOperation")

351

asset_group = operation.create

352

asset_group.name = asset_group_name

353

asset_group.campaign = campaign_resource_name

354

asset_group.final_urls.extend(final_urls)

355

asset_group.final_mobile_urls.extend(final_urls)

356

asset_group.status = client.enums.AssetGroupStatusEnum.ENABLED

357

358

# Set path fields for display URLs

359

asset_group.path1 = "shop"

360

asset_group.path2 = "deals"

361

362

try:

363

response = asset_group_service.mutate_asset_groups(

364

customer_id=customer_id,

365

operations=[operation]

366

)

367

368

asset_group_resource_name = response.results[0].resource_name

369

print(f"Created asset group: {asset_group_resource_name}")

370

return asset_group_resource_name

371

372

except GoogleAdsException as ex:

373

print(f"Asset group creation failed: {ex.error.code().name}")

374

for error in ex.failure.errors:

375

print(f"Error: {error.message}")

376

return None

377

```

378

379

### Add Assets to Asset Group

380

381

```python

382

def add_assets_to_asset_group(client, customer_id, asset_group_resource_name, asset_assignments):

383

"""Add assets to an asset group with field type assignments."""

384

385

asset_group_asset_service = client.get_service("AssetGroupAssetService")

386

387

operations = []

388

389

for assignment in asset_assignments:

390

operation = client.get_type("AssetGroupAssetOperation")

391

asset_group_asset = operation.create

392

asset_group_asset.asset_group = asset_group_resource_name

393

asset_group_asset.asset = assignment['asset_resource_name']

394

asset_group_asset.field_type = assignment['field_type']

395

396

operations.append(operation)

397

398

try:

399

response = asset_group_asset_service.mutate_asset_group_assets(

400

customer_id=customer_id,

401

operations=operations

402

)

403

404

print(f"Added {len(response.results)} assets to asset group")

405

return [result.resource_name for result in response.results]

406

407

except GoogleAdsException as ex:

408

print(f"Asset assignment failed: {ex.error.code().name}")

409

for error in ex.failure.errors:

410

print(f"Error: {error.message}")

411

return []

412

413

# Example usage - Complete asset group setup

414

def setup_complete_asset_group(client, customer_id, campaign_resource_name):

415

"""Set up a complete asset group with all required assets."""

416

417

# Create assets first

418

headline_assets = []

419

for i in range(5): # Need 3-15 headlines

420

headline_asset = create_text_asset(

421

client, customer_id, f"Headline {i+1}", f"Headline {i+1}"

422

)

423

headline_assets.append(headline_asset)

424

425

description_assets = []

426

for i in range(3): # Need 2-5 descriptions

427

description_asset = create_text_asset(

428

client, customer_id, f"Description {i+1}", f"Description {i+1}"

429

)

430

description_assets.append(description_asset)

431

432

# Upload required images (would need actual image files)

433

# logo_asset = upload_logo_asset(client, customer_id, "logo.png", "Company Logo")

434

# marketing_image = upload_image_asset(client, customer_id, "marketing.jpg", "Marketing Image")

435

# square_marketing_image = upload_image_asset(client, customer_id, "square.jpg", "Square Image")

436

437

# Create asset group

438

asset_group_name = "Performance Max Asset Group"

439

final_urls = ["https://www.example.com"]

440

441

asset_group_resource_name = create_performance_max_asset_group(

442

client, customer_id, campaign_resource_name, asset_group_name, final_urls

443

)

444

445

# Prepare asset assignments

446

asset_assignments = []

447

448

# Add headlines

449

for headline_asset in headline_assets:

450

asset_assignments.append({

451

'asset_resource_name': headline_asset,

452

'field_type': client.enums.AssetFieldTypeEnum.HEADLINE

453

})

454

455

# Add descriptions

456

for description_asset in description_assets:

457

asset_assignments.append({

458

'asset_resource_name': description_asset,

459

'field_type': client.enums.AssetFieldTypeEnum.DESCRIPTION

460

})

461

462

# Add images (commented out as we need actual image files)

463

# asset_assignments.extend([

464

# {

465

# 'asset_resource_name': logo_asset,

466

# 'field_type': client.enums.AssetFieldTypeEnum.LOGO

467

# },

468

# {

469

# 'asset_resource_name': marketing_image,

470

# 'field_type': client.enums.AssetFieldTypeEnum.MARKETING_IMAGE

471

# },

472

# {

473

# 'asset_resource_name': square_marketing_image,

474

# 'field_type': client.enums.AssetFieldTypeEnum.SQUARE_MARKETING_IMAGE

475

# }

476

# ])

477

478

# Add assets to asset group

479

add_assets_to_asset_group(client, customer_id, asset_group_resource_name, asset_assignments)

480

481

return asset_group_resource_name

482

```

483

484

## Asset Set Examples

485

486

### Create Merchant Center Asset Set

487

488

```python

489

def create_merchant_center_asset_set(client, customer_id, asset_set_name, merchant_id, feed_label=None):

490

"""Create an asset set linked to Merchant Center for Shopping campaigns."""

491

492

asset_set_service = client.get_service("AssetSetService")

493

494

operation = client.get_type("AssetSetOperation")

495

asset_set = operation.create

496

asset_set.name = asset_set_name

497

asset_set.type_ = client.enums.AssetSetTypeEnum.MERCHANT_CENTER_FEED

498

499

# Configure Merchant Center settings

500

merchant_center_feed = asset_set.merchant_center_feed

501

merchant_center_feed.merchant_id = merchant_id

502

if feed_label:

503

merchant_center_feed.feed_label = feed_label

504

505

try:

506

response = asset_set_service.mutate_asset_sets(

507

customer_id=customer_id,

508

operations=[operation]

509

)

510

511

return response.results[0].resource_name

512

513

except GoogleAdsException as ex:

514

print(f"Asset set creation failed: {ex.error.code().name}")

515

for error in ex.failure.errors:

516

print(f"Error: {error.message}")

517

return None

518

```

519

520

### Create Dynamic Education Asset Set

521

522

```python

523

def create_dynamic_education_asset_set(client, customer_id, asset_set_name, program_ids):

524

"""Create an asset set for dynamic education ads."""

525

526

asset_set_service = client.get_service("AssetSetService")

527

528

operation = client.get_type("AssetSetOperation")

529

asset_set = operation.create

530

asset_set.name = asset_set_name

531

asset_set.type_ = client.enums.AssetSetTypeEnum.DYNAMIC_EDUCATION

532

533

# Configure dynamic education settings

534

dynamic_education_feed = asset_set.dynamic_education_feed

535

dynamic_education_feed.program_ids.extend(program_ids)

536

dynamic_education_feed.language_code = "en"

537

538

response = asset_set_service.mutate_asset_sets(

539

customer_id=customer_id,

540

operations=[operation]

541

)

542

543

return response.results[0].resource_name

544

```

545

546

### Link Asset Set to Campaign

547

548

```python

549

def link_asset_set_to_campaign(client, customer_id, campaign_resource_name, asset_set_resource_name):

550

"""Link an asset set to a campaign."""

551

552

campaign_asset_set_service = client.get_service("CampaignAssetSetService")

553

554

operation = client.get_type("CampaignAssetSetOperation")

555

campaign_asset_set = operation.create

556

campaign_asset_set.campaign = campaign_resource_name

557

campaign_asset_set.asset_set = asset_set_resource_name

558

559

response = campaign_asset_set_service.mutate_campaign_asset_sets(

560

customer_id=customer_id,

561

operations=[operation]

562

)

563

564

return response.results[0].resource_name

565

```

566

567

## Asset Performance Analysis

568

569

### Get Asset Performance Metrics

570

571

```python

572

def get_asset_performance(client, customer_id, start_date, end_date):

573

"""Get performance metrics for assets."""

574

575

googleads_service = client.get_service("GoogleAdsService")

576

577

query = f'''

578

SELECT

579

asset.id,

580

asset.name,

581

asset.type,

582

asset.source,

583

segments.asset_interaction_target.asset,

584

segments.asset_interaction_target.interaction_on_this_asset,

585

metrics.impressions,

586

metrics.clicks,

587

metrics.ctr,

588

metrics.conversions,

589

metrics.cost_micros

590

FROM asset

591

WHERE segments.date BETWEEN '{start_date}' AND '{end_date}'

592

AND metrics.impressions > 0

593

ORDER BY metrics.impressions DESC

594

'''

595

596

response = googleads_service.search(

597

customer_id=customer_id,

598

query=query

599

)

600

601

asset_performance = []

602

for row in response:

603

asset = row.asset

604

metrics = row.metrics

605

606

asset_data = {

607

'asset_id': asset.id,

608

'asset_name': asset.name,

609

'asset_type': asset.type_.name,

610

'source': asset.source.name,

611

'impressions': metrics.impressions,

612

'clicks': metrics.clicks,

613

'ctr': metrics.ctr,

614

'conversions': metrics.conversions,

615

'cost': metrics.cost_micros / 1_000_000

616

}

617

asset_performance.append(asset_data)

618

619

return asset_performance

620

```

621

622

### Asset Group Performance Report

623

624

```python

625

def get_asset_group_performance(client, customer_id, campaign_resource_name):

626

"""Get performance report for asset groups in a campaign."""

627

628

googleads_service = client.get_service("GoogleAdsService")

629

630

query = f'''

631

SELECT

632

asset_group.id,

633

asset_group.name,

634

asset_group.status,

635

asset_group.path1,

636

asset_group.path2,

637

metrics.impressions,

638

metrics.clicks,

639

metrics.ctr,

640

metrics.conversions,

641

metrics.conversion_rate,

642

metrics.cost_micros,

643

metrics.cost_per_conversion

644

FROM asset_group

645

WHERE asset_group.campaign = '{campaign_resource_name}'

646

AND segments.date DURING LAST_30_DAYS

647

ORDER BY metrics.cost_micros DESC

648

'''

649

650

response = googleads_service.search(

651

customer_id=customer_id,

652

query=query

653

)

654

655

asset_group_performance = []

656

for row in response:

657

asset_group = row.asset_group

658

metrics = row.metrics

659

660

group_data = {

661

'asset_group_id': asset_group.id,

662

'asset_group_name': asset_group.name,

663

'status': asset_group.status.name,

664

'path1': asset_group.path1,

665

'path2': asset_group.path2,

666

'impressions': metrics.impressions,

667

'clicks': metrics.clicks,

668

'ctr': metrics.ctr,

669

'conversions': metrics.conversions,

670

'conversion_rate': metrics.conversion_rate,

671

'cost': metrics.cost_micros / 1_000_000,

672

'cost_per_conversion': metrics.cost_per_conversion / 1_000_000 if metrics.cost_per_conversion else 0

673

}

674

asset_group_performance.append(group_data)

675

676

return asset_group_performance

677

```

678

679

## Types

680

681

```python { .api }

682

# Asset types

683

class Asset:

684

resource_name: str

685

id: Optional[int]

686

name: Optional[str]

687

type_: AssetTypeEnum.AssetType

688

final_urls: List[str]

689

final_mobile_urls: List[str]

690

tracking_url_template: Optional[str]

691

url_custom_parameters: List[CustomParameter]

692

final_url_suffix: Optional[str]

693

source: AssetSourceEnum.AssetSource

694

policy_summary: AssetPolicySummary

695

field_type_policy_summaries: List[AssetFieldTypePolicySummary]

696

697

# Asset types (one of the following)

698

youtube_video_asset: YoutubeVideoAsset

699

media_bundle_asset: MediaBundleAsset

700

image_asset: ImageAsset

701

text_asset: TextAsset

702

lead_form_asset: LeadFormAsset

703

book_on_google_asset: BookOnGoogleAsset

704

promotion_asset: PromotionAsset

705

callout_asset: CalloutAsset

706

structured_snippet_asset: StructuredSnippetAsset

707

sitelink_asset: SitelinkAsset

708

page_feed_asset: PageFeedAsset

709

dynamic_education_asset: DynamicEducationAsset

710

mobile_app_asset: MobileAppAsset

711

hotel_callout_asset: HotelCalloutAsset

712

call_asset: CallAsset

713

price_asset: PriceAsset

714

call_to_action_asset: CallToActionAsset

715

dynamic_real_estate_asset: DynamicRealEstateAsset

716

dynamic_custom_asset: DynamicCustomAsset

717

dynamic_hotels_and_rentals_asset: DynamicHotelsAndRentalsAsset

718

dynamic_flights_asset: DynamicFlightsAsset

719

discovery_carousel_card_asset: DiscoveryCarouselCardAsset

720

dynamic_travel_asset: DynamicTravelAsset

721

dynamic_local_asset: DynamicLocalAsset

722

dynamic_jobs_asset: DynamicJobsAsset

723

724

class ImageAsset:

725

data: bytes

726

file_size: Optional[int]

727

mime_type: MimeTypeEnum.MimeType

728

full_size: ImageDimension

729

730

class YoutubeVideoAsset:

731

youtube_video_id: Optional[str]

732

youtube_video_title: Optional[str]

733

734

class TextAsset:

735

text: Optional[str]

736

737

class MediaBundleAsset:

738

data: Optional[bytes]

739

740

# Asset group types

741

class AssetGroup:

742

resource_name: str

743

id: Optional[int]

744

campaign: Optional[str]

745

name: Optional[str]

746

final_urls: List[str]

747

final_mobile_urls: List[str]

748

status: AssetGroupStatusEnum.AssetGroupStatus

749

primary_status: AssetGroupPrimaryStatusEnum.AssetGroupPrimaryStatus

750

primary_status_reasons: List[AssetGroupPrimaryStatusReasonEnum.AssetGroupPrimaryStatusReason]

751

path1: Optional[str]

752

path2: Optional[str]

753

ad_strength: AdStrengthEnum.AdStrength

754

755

class AssetGroupAsset:

756

resource_name: str

757

asset_group: Optional[str]

758

asset: Optional[str]

759

field_type: AssetFieldTypeEnum.AssetFieldType

760

status: AssetLinkStatusEnum.AssetLinkStatus

761

primary_status: AssetLinkPrimaryStatusEnum.AssetLinkPrimaryStatus

762

primary_status_reasons: List[AssetLinkPrimaryStatusReasonEnum.AssetLinkPrimaryStatusReason]

763

primary_status_details: List[AssetLinkPrimaryStatusDetails]

764

performance_label: AssetPerformanceLabelEnum.AssetPerformanceLabel

765

policy_summary: AssetGroupAssetPolicySummary

766

767

# Asset set types

768

class AssetSet:

769

resource_name: str

770

id: Optional[int]

771

name: Optional[str]

772

type_: AssetSetTypeEnum.AssetSetType

773

status: AssetSetStatusEnum.AssetSetStatus

774

775

# Asset set types (one of the following)

776

merchant_center_feed: MerchantCenterFeed

777

location_group_parent_asset_set_id: Optional[int]

778

hotel_property_data: HotelPropertyAsset

779

dynamic_education_feed: DynamicEducationFeed

780

dynamic_real_estate_feed: DynamicRealEstateFeed

781

dynamic_custom_feed: DynamicCustomFeed

782

dynamic_hotels_and_rentals_feed: DynamicHotelsAndRentalsFeed

783

dynamic_flights_feed: DynamicFlightsFeed

784

dynamic_travel_feed: DynamicTravelFeed

785

dynamic_local_feed: DynamicLocalFeed

786

dynamic_jobs_feed: DynamicJobsFeed

787

788

class AssetSetAsset:

789

resource_name: str

790

asset_set: Optional[str]

791

asset: Optional[str]

792

status: AssetSetAssetStatusEnum.AssetSetAssetStatus

793

794

class MerchantCenterFeed:

795

merchant_id: Optional[int]

796

feed_label: Optional[str]

797

798

# Campaign asset associations

799

class CampaignAsset:

800

resource_name: str

801

campaign: Optional[str]

802

asset: Optional[str]

803

field_type: AssetFieldTypeEnum.AssetFieldType

804

source: AssetSourceEnum.AssetSource

805

status: AssetLinkStatusEnum.AssetLinkStatus

806

primary_status: AssetLinkPrimaryStatusEnum.AssetLinkPrimaryStatus

807

primary_status_details: List[AssetLinkPrimaryStatusDetails]

808

primary_status_reasons: List[AssetLinkPrimaryStatusReasonEnum.AssetLinkPrimaryStatusReason]

809

810

class CampaignAssetSet:

811

resource_name: str

812

campaign: Optional[str]

813

asset_set: Optional[str]

814

status: AssetSetLinkStatusEnum.AssetSetLinkStatus

815

816

# Operation types

817

class AssetOperation:

818

update_mask: FieldMask

819

create: Asset

820

update: Asset

821

remove: str

822

823

class AssetGroupOperation:

824

update_mask: FieldMask

825

create: AssetGroup

826

update: AssetGroup

827

remove: str

828

829

class AssetGroupAssetOperation:

830

update_mask: FieldMask

831

create: AssetGroupAsset

832

update: AssetGroupAsset

833

remove: str

834

835

class AssetSetOperation:

836

update_mask: FieldMask

837

create: AssetSet

838

update: AssetSet

839

remove: str

840

841

class AssetSetAssetOperation:

842

update_mask: FieldMask

843

create: AssetSetAsset

844

update: AssetSetAsset

845

remove: str

846

847

# Response types

848

class MutateAssetsResponse:

849

partial_failure_error: Status

850

results: List[MutateAssetResult]

851

852

class MutateAssetResult:

853

resource_name: str

854

asset: Asset

855

856

class MutateAssetGroupsResponse:

857

partial_failure_error: Status

858

results: List[MutateAssetGroupResult]

859

860

class MutateAssetGroupResult:

861

resource_name: str

862

asset_group: AssetGroup

863

864

class MutateAssetGroupAssetsResponse:

865

partial_failure_error: Status

866

results: List[MutateAssetGroupAssetResult]

867

868

class MutateAssetGroupAssetResult:

869

resource_name: str

870

asset_group_asset: AssetGroupAsset

871

872

class MutateAssetSetsResponse:

873

partial_failure_error: Status

874

results: List[MutateAssetSetResult]

875

876

class MutateAssetSetResult:

877

resource_name: str

878

asset_set: AssetSet

879

```