@adcp/client 4.5.2 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  2. package/dist/lib/core/SingleAgentClient.d.ts +41 -1
  3. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  4. package/dist/lib/core/SingleAgentClient.js +54 -0
  5. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  6. package/dist/lib/core/TaskExecutor.d.ts +10 -0
  7. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  8. package/dist/lib/core/TaskExecutor.js +23 -11
  9. package/dist/lib/core/TaskExecutor.js.map +1 -1
  10. package/dist/lib/errors/index.d.ts +10 -0
  11. package/dist/lib/errors/index.d.ts.map +1 -1
  12. package/dist/lib/errors/index.js +20 -1
  13. package/dist/lib/errors/index.js.map +1 -1
  14. package/dist/lib/index.d.ts +3 -3
  15. package/dist/lib/index.d.ts.map +1 -1
  16. package/dist/lib/index.js +9 -4
  17. package/dist/lib/index.js.map +1 -1
  18. package/dist/lib/testing/orchestrator.d.ts.map +1 -1
  19. package/dist/lib/testing/orchestrator.js +13 -0
  20. package/dist/lib/testing/orchestrator.js.map +1 -1
  21. package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -1
  22. package/dist/lib/testing/scenarios/media-buy.js +18 -9
  23. package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
  24. package/dist/lib/testing/types.d.ts +1 -0
  25. package/dist/lib/testing/types.d.ts.map +1 -1
  26. package/dist/lib/types/core.generated.d.ts +84 -39
  27. package/dist/lib/types/core.generated.d.ts.map +1 -1
  28. package/dist/lib/types/core.generated.js +1 -1
  29. package/dist/lib/types/schemas.generated.d.ts +2758 -171
  30. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  31. package/dist/lib/types/schemas.generated.js +108 -83
  32. package/dist/lib/types/schemas.generated.js.map +1 -1
  33. package/dist/lib/types/tools.generated.d.ts +228 -149
  34. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  35. package/dist/lib/utils/capabilities.d.ts +38 -0
  36. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  37. package/dist/lib/utils/capabilities.js +140 -1
  38. package/dist/lib/utils/capabilities.js.map +1 -1
  39. package/dist/lib/version.d.ts +3 -3
  40. package/dist/lib/version.js +3 -3
  41. package/package.json +1 -1
@@ -126,6 +126,10 @@ export type AccountReference = {
126
126
  * Domain of the entity operating on the brand's behalf. When the brand operates directly, this is the brand's domain.
127
127
  */
128
128
  operator: string;
129
+ /**
130
+ * When true, references the sandbox account for this brand/operator pair. Defaults to false (production account).
131
+ */
132
+ sandbox?: boolean;
129
133
  };
130
134
  /**
131
135
  * Type of inventory delivery
@@ -467,10 +471,6 @@ export interface MediaBuyFeatures {
467
471
  * Supports sync_catalogs task for catalog feed management with platform review and approval
468
472
  */
469
473
  catalog_management?: boolean;
470
- /**
471
- * Supports sandbox mode for operations without real platform calls or spend
472
- */
473
- sandbox?: boolean;
474
474
  [k: string]: boolean | undefined;
475
475
  }
476
476
  /**
@@ -1193,7 +1193,7 @@ export interface CPAPricingOption {
1193
1193
  min_spend_per_package?: number;
1194
1194
  }
1195
1195
  /**
1196
- * Flat rate pricing for DOOH, sponsorships, and time-based campaigns. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
1196
+ * Flat rate pricing for sponsorships, takeovers, and DOOH exclusive placements. A fixed total cost regardless of delivery volume. For duration-scaled pricing (rate × time units), use the `time` model instead. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
1197
1197
  */
1198
1198
  export interface FlatRatePricingOption {
1199
1199
  /**
@@ -1217,44 +1217,49 @@ export interface FlatRatePricingOption {
1217
1217
  */
1218
1218
  floor_price?: number;
1219
1219
  price_guidance?: PriceGuidance;
1220
- /**
1221
- * Flat rate parameters for DOOH and time-based campaigns
1222
- */
1223
- parameters?: {
1224
- /**
1225
- * Duration in hours for time-based pricing
1226
- */
1227
- duration_hours?: number;
1228
- /**
1229
- * Guaranteed share of voice (0-100)
1230
- */
1231
- sov_percentage?: number;
1232
- /**
1233
- * Duration of ad loop rotation in seconds
1234
- */
1235
- loop_duration_seconds?: number;
1236
- /**
1237
- * Minimum plays per hour
1238
- */
1239
- min_plays_per_hour?: number;
1240
- /**
1241
- * Named venue package identifier
1242
- */
1243
- venue_package?: string;
1244
- /**
1245
- * Estimated impressions (informational)
1246
- */
1247
- estimated_impressions?: number;
1248
- /**
1249
- * Specific daypart for time-based pricing
1250
- */
1251
- daypart?: string;
1252
- };
1220
+ parameters?: DoohParameters;
1253
1221
  /**
1254
1222
  * Minimum spend requirement per package using this pricing option, in the specified currency
1255
1223
  */
1256
1224
  min_spend_per_package?: number;
1257
1225
  }
1226
+ /**
1227
+ * DOOH inventory allocation parameters. Sponsorship and takeover flat_rate options omit this field entirely — only include for digital out-of-home inventory.
1228
+ */
1229
+ export interface DoohParameters {
1230
+ /**
1231
+ * Discriminator identifying this as DOOH parameters
1232
+ */
1233
+ type: 'dooh';
1234
+ /**
1235
+ * Guaranteed share of voice as a percentage (0-100)
1236
+ */
1237
+ sov_percentage?: number;
1238
+ /**
1239
+ * Duration of the ad loop rotation in seconds
1240
+ */
1241
+ loop_duration_seconds?: number;
1242
+ /**
1243
+ * Minimum number of plays per hour guaranteed
1244
+ */
1245
+ min_plays_per_hour?: number;
1246
+ /**
1247
+ * Named collection of screens included in this buy
1248
+ */
1249
+ venue_package?: string;
1250
+ /**
1251
+ * Duration of the DOOH slot in hours (e.g., 24 for a full-day takeover)
1252
+ */
1253
+ duration_hours?: number;
1254
+ /**
1255
+ * Named daypart for this slot (e.g., morning_commute, evening_rush)
1256
+ */
1257
+ daypart?: string;
1258
+ /**
1259
+ * Estimated audience impressions for this slot (informational, not a delivery guarantee)
1260
+ */
1261
+ estimated_impressions?: number;
1262
+ }
1258
1263
  /**
1259
1264
  * Cost per time unit (hour, day, week, or month) - rate scales with campaign duration. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
1260
1265
  */
@@ -1572,6 +1577,14 @@ export interface ProductAllocation {
1572
1577
  * Categorical tags for this allocation (e.g., 'desktop', 'german', 'mobile') - useful for grouping/filtering allocations by dimension
1573
1578
  */
1574
1579
  tags?: string[];
1580
+ /**
1581
+ * Recommended flight start date/time for this allocation in ISO 8601 format. Allows publishers to propose per-flight scheduling within a proposal. When omitted, the allocation applies to the full campaign date range.
1582
+ */
1583
+ start_time?: string;
1584
+ /**
1585
+ * Recommended flight end date/time for this allocation in ISO 8601 format. Allows publishers to propose per-flight scheduling within a proposal. When omitted, the allocation applies to the full campaign date range.
1586
+ */
1587
+ end_time?: string;
1575
1588
  /**
1576
1589
  * Recommended time windows for this allocation in spot-plan proposals.
1577
1590
  */
@@ -1662,6 +1675,10 @@ export type WCAGLevel = 'A' | 'AA' | 'AAA';
1662
1675
  * Where a required disclosure should appear within a creative. Used by creative briefs to specify disclosure placement and by formats to declare which positions they can render.
1663
1676
  */
1664
1677
  export type DisclosurePosition = 'prominent' | 'footer' | 'audio' | 'subtitle' | 'overlay' | 'end_card' | 'pre_roll' | 'companion';
1678
+ /**
1679
+ * How long a disclosure must persist during content playback or display. Different jurisdictions and regulations require different persistence behaviors for AI-generated content labels. When multiple sources specify persistence for the same jurisdiction (e.g., brief and provenance), the most restrictive mode applies: continuous > initial > flexible.
1680
+ */
1681
+ export type DisclosurePersistence = 'continuous' | 'initial' | 'flexible';
1665
1682
  /**
1666
1683
  * Request parameters for discovering supported creative formats
1667
1684
  */
@@ -1701,9 +1718,13 @@ export interface ListCreativeFormatsRequest {
1701
1718
  name_search?: string;
1702
1719
  wcag_level?: WCAGLevel;
1703
1720
  /**
1704
- * Filter to formats whose supported_disclosure_positions include all of these positions. Use to find formats compatible with a brief's compliance requirements.
1721
+ * Filter to formats that support all of these disclosure positions. When a format has disclosure_capabilities, match against those positions. Otherwise fall back to supported_disclosure_positions. Use to find formats compatible with a brief's compliance requirements.
1705
1722
  */
1706
1723
  disclosure_positions?: DisclosurePosition[];
1724
+ /**
1725
+ * Filter to formats where each requested persistence mode is supported by at least one position in disclosure_capabilities. Different positions may satisfy different modes. Use to find formats compatible with jurisdiction-specific persistence requirements (e.g., continuous for EU AI Act).
1726
+ */
1727
+ disclosure_persistence?: DisclosurePersistence[];
1707
1728
  /**
1708
1729
  * Filter to formats whose output_format_ids includes any of these format IDs. Returns formats that can produce these outputs — inspect each result's input_format_ids to see what inputs they accept.
1709
1730
  */
@@ -1868,6 +1889,16 @@ export interface Format {
1868
1889
  * Disclosure positions this format can render. Buyers use this to determine whether a format can satisfy their compliance requirements before submitting a creative. When omitted, the format makes no disclosure rendering guarantees — creative agents SHOULD treat this as incompatible with briefs that require specific disclosure positions. Values correspond to positions on creative-brief.json required_disclosures.
1869
1890
  */
1870
1891
  supported_disclosure_positions?: DisclosurePosition[];
1892
+ /**
1893
+ * Structured disclosure capabilities per position with persistence modes. Declares which persistence behaviors each disclosure position supports, enabling persistence-aware matching against provenance render guidance and brief requirements. When present, supersedes supported_disclosure_positions for persistence-aware queries. The flat supported_disclosure_positions field is retained for backward compatibility. Each position MUST appear at most once; validators and agents SHOULD reject duplicates.
1894
+ */
1895
+ disclosure_capabilities?: {
1896
+ position: DisclosurePosition;
1897
+ /**
1898
+ * Persistence modes this position supports
1899
+ */
1900
+ persistence: DisclosurePersistence[];
1901
+ }[];
1871
1902
  /**
1872
1903
  * Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.
1873
1904
  */
@@ -2438,6 +2469,14 @@ export interface PackageRequest {
2438
2469
  * Impression goal for this package
2439
2470
  */
2440
2471
  impressions?: number;
2472
+ /**
2473
+ * Flight start date/time for this package in ISO 8601 format. When omitted, the package inherits the media buy's start_time. Must fall within the media buy's date range.
2474
+ */
2475
+ start_time?: string;
2476
+ /**
2477
+ * Flight end date/time for this package in ISO 8601 format. When omitted, the package inherits the media buy's end_time. Must fall within the media buy's date range.
2478
+ */
2479
+ end_time?: string;
2441
2480
  /**
2442
2481
  * Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false.
2443
2482
  */
@@ -2771,6 +2810,10 @@ export interface Provenance {
2771
2810
  */
2772
2811
  role: 'creator' | 'advertiser' | 'agency' | 'platform' | 'tool';
2773
2812
  };
2813
+ /**
2814
+ * When this provenance claim was made (ISO 8601). Distinct from created_time, which records when the content itself was produced. A provenance claim may be attached well after content creation, for example when retroactively declaring AI involvement for regulatory compliance.
2815
+ */
2816
+ declared_at?: string;
2774
2817
  /**
2775
2818
  * When this content was created or generated (ISO 8601)
2776
2819
  */
@@ -2812,6 +2855,21 @@ export interface Provenance {
2812
2855
  * Required disclosure label text for this jurisdiction, in the local language
2813
2856
  */
2814
2857
  label_text?: string;
2858
+ /**
2859
+ * How the disclosure should be rendered for this jurisdiction. Expresses the declaring party's intent for persistence and position based on regulatory requirements. Publishers control actual rendering but governance agents can audit whether guidance was followed.
2860
+ */
2861
+ render_guidance?: {
2862
+ persistence?: DisclosurePersistence;
2863
+ /**
2864
+ * Minimum display duration in milliseconds for initial persistence. Recommended when persistence is initial — without it, the duration is at the publisher's discretion. At serve time the publisher reads this from provenance since the brief is not available.
2865
+ */
2866
+ min_duration_ms?: number;
2867
+ /**
2868
+ * Preferred disclosure positions in priority order. The first position a format supports should be used.
2869
+ */
2870
+ positions?: DisclosurePosition[];
2871
+ ext?: ExtensionObject;
2872
+ };
2815
2873
  }[];
2816
2874
  };
2817
2875
  /**
@@ -3261,6 +3319,7 @@ export interface CreativeBrief {
3261
3319
  * Language of the disclosure text as a BCP 47 language tag (e.g., 'en', 'fr-CA', 'es'). When omitted, the disclosure is assumed to match the creative's language.
3262
3320
  */
3263
3321
  language?: string;
3322
+ persistence?: DisclosurePersistence;
3264
3323
  }[];
3265
3324
  /**
3266
3325
  * Claims that must not appear in creatives for this campaign. Creative agents should ensure generated content avoids these claims.
@@ -3455,7 +3514,7 @@ export interface Account {
3455
3514
  */
3456
3515
  account_scope?: 'operator' | 'brand' | 'operator_brand' | 'agent';
3457
3516
  /**
3458
- * When true, this is a sandbox account. All requests using this account_id are treated as sandbox no real platform calls, no real spend.
3517
+ * When true, this is a sandbox account — no real platform calls, no real spend. Sandbox is part of the account's natural key: the same brand/operator pair can have both a production and sandbox account.
3459
3518
  */
3460
3519
  sandbox?: boolean;
3461
3520
  ext?: ExtensionObject;
@@ -3514,6 +3573,14 @@ export interface Package {
3514
3573
  * Optimization targets for this package. The seller optimizes delivery toward these goals in priority order. Common pattern: event goals (purchase, install) as primary targets at priority 1; metric goals (clicks, views) as secondary proxy signals at priority 2+.
3515
3574
  */
3516
3575
  optimization_goals?: OptimizationGoal[];
3576
+ /**
3577
+ * Flight start date/time for this package in ISO 8601 format. When omitted, the package inherits the media buy's start_time. Sellers SHOULD always include the resolved value in responses, even when inherited.
3578
+ */
3579
+ start_time?: string;
3580
+ /**
3581
+ * Flight end date/time for this package in ISO 8601 format. When omitted, the package inherits the media buy's end_time. Sellers SHOULD always include the resolved value in responses, even when inherited.
3582
+ */
3583
+ end_time?: string;
3517
3584
  /**
3518
3585
  * Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.
3519
3586
  */
@@ -4055,6 +4122,14 @@ export type PackageUpdate = {
4055
4122
  * Updated impression goal for this package
4056
4123
  */
4057
4124
  impressions?: number;
4125
+ /**
4126
+ * Updated flight start date/time for this package in ISO 8601 format. Must fall within the media buy's date range.
4127
+ */
4128
+ start_time?: string;
4129
+ /**
4130
+ * Updated flight end date/time for this package in ISO 8601 format. Must fall within the media buy's date range.
4131
+ */
4132
+ end_time?: string;
4058
4133
  /**
4059
4134
  * Pause/resume specific package (true = paused, false = active)
4060
4135
  */
@@ -4266,109 +4341,7 @@ export interface GetMediaBuysResponse {
4266
4341
  /**
4267
4342
  * Packages within this media buy, augmented with creative approval status and optional delivery snapshots
4268
4343
  */
4269
- packages: {
4270
- /**
4271
- * Publisher's package identifier
4272
- */
4273
- package_id: string;
4274
- /**
4275
- * Buyer's reference identifier for this package
4276
- */
4277
- buyer_ref?: string;
4278
- /**
4279
- * Product identifier this package is purchased from
4280
- */
4281
- product_id?: string;
4282
- /**
4283
- * Package budget amount, denominated in package.currency when present, otherwise media_buy.currency
4284
- */
4285
- budget?: number;
4286
- /**
4287
- * ISO 4217 currency code for monetary values at this package level (budget, bid_price, snapshot.spend). When absent, inherit media_buy.currency.
4288
- */
4289
- currency?: string;
4290
- /**
4291
- * Current bid price for auction-based packages. Denominated in package.currency when present, otherwise media_buy.currency. Relevant for automated price optimization loops.
4292
- */
4293
- bid_price?: number;
4294
- /**
4295
- * Goal impression count for impression-based packages
4296
- */
4297
- impressions?: number;
4298
- /**
4299
- * ISO 8601 flight start time for this package. Use to determine whether the package is within its scheduled flight before interpreting delivery status.
4300
- */
4301
- start_time?: string;
4302
- /**
4303
- * ISO 8601 flight end time for this package
4304
- */
4305
- end_time?: string;
4306
- /**
4307
- * Whether this package is currently paused by the buyer
4308
- */
4309
- paused?: boolean;
4310
- /**
4311
- * Approval status for each creative assigned to this package. Absent when no creatives have been assigned.
4312
- */
4313
- creative_approvals?: {
4314
- /**
4315
- * Creative identifier
4316
- */
4317
- creative_id: string;
4318
- approval_status?: CreativeApprovalStatus;
4319
- /**
4320
- * Human-readable explanation of why the creative was rejected. Present only when approval_status is 'rejected'.
4321
- */
4322
- rejection_reason?: string;
4323
- }[];
4324
- /**
4325
- * Format IDs from the original create_media_buy format_ids_to_provide that have not yet been uploaded via sync_creatives. When empty or absent, all required formats have been provided.
4326
- */
4327
- format_ids_pending?: FormatID[];
4328
- /**
4329
- * Machine-readable reason the snapshot is omitted. Present only when include_snapshot was true and snapshot is unavailable for this package.
4330
- */
4331
- snapshot_unavailable_reason?: 'SNAPSHOT_UNSUPPORTED' | 'SNAPSHOT_TEMPORARILY_UNAVAILABLE' | 'SNAPSHOT_PERMISSION_DENIED';
4332
- /**
4333
- * Near-real-time delivery snapshot for this package. Only present when include_snapshot was true in the request. Represents the latest available entity-level stats from the platform — not billing-grade data.
4334
- */
4335
- snapshot?: {
4336
- /**
4337
- * ISO 8601 timestamp when this snapshot was captured by the platform
4338
- */
4339
- as_of: string;
4340
- /**
4341
- * Maximum age of this data in seconds. For example, 900 means the data may be up to 15 minutes old. Use this to interpret zero delivery: a value of 900 means zero impressions is likely real; a value of 14400 means reporting may still be catching up.
4342
- */
4343
- staleness_seconds: number;
4344
- /**
4345
- * Total impressions delivered since package start
4346
- */
4347
- impressions: number;
4348
- /**
4349
- * Total spend since package start, denominated in snapshot.currency when present, otherwise package.currency or media_buy.currency
4350
- */
4351
- spend: number;
4352
- /**
4353
- * ISO 4217 currency code for spend in this snapshot. Optional when unchanged from package.currency or media_buy.currency.
4354
- */
4355
- currency?: string;
4356
- /**
4357
- * Total clicks since package start (when available)
4358
- */
4359
- clicks?: number;
4360
- /**
4361
- * Current delivery pace relative to expected (1.0 = on track, <1.0 = behind, >1.0 = ahead). Absent when pacing cannot be determined.
4362
- */
4363
- pacing_index?: number;
4364
- /**
4365
- * Operational delivery state of this package. 'not_delivering' means the package is within its scheduled flight but has delivered zero impressions for at least one full staleness cycle — the signal for automated price adjustments or buyer alerts. Implementers must not return 'not_delivering' until at least staleness_seconds have elapsed since package activation.
4366
- */
4367
- delivery_status?: 'delivering' | 'not_delivering' | 'completed' | 'budget_exhausted' | 'flight_ended' | 'goal_met';
4368
- ext?: ExtensionObject;
4369
- };
4370
- ext?: ExtensionObject;
4371
- }[];
4344
+ packages: PackageStatus[];
4372
4345
  ext?: ExtensionObject;
4373
4346
  }[];
4374
4347
  /**
@@ -4383,6 +4356,112 @@ export interface GetMediaBuysResponse {
4383
4356
  context?: ContextObject;
4384
4357
  ext?: ExtensionObject;
4385
4358
  }
4359
+ /**
4360
+ * Current status of a package within a media buy — includes creative approval state and optional delivery snapshot. For the creation input shape, see PackageRequest. For the creation output shape, see Package.
4361
+ */
4362
+ export interface PackageStatus {
4363
+ /**
4364
+ * Publisher's package identifier
4365
+ */
4366
+ package_id: string;
4367
+ /**
4368
+ * Buyer's reference identifier for this package
4369
+ */
4370
+ buyer_ref?: string;
4371
+ /**
4372
+ * Product identifier this package is purchased from
4373
+ */
4374
+ product_id?: string;
4375
+ /**
4376
+ * Package budget amount, denominated in package.currency when present, otherwise media_buy.currency
4377
+ */
4378
+ budget?: number;
4379
+ /**
4380
+ * ISO 4217 currency code for monetary values at this package level (budget, bid_price, snapshot.spend). When absent, inherit media_buy.currency.
4381
+ */
4382
+ currency?: string;
4383
+ /**
4384
+ * Current bid price for auction-based packages. Denominated in package.currency when present, otherwise media_buy.currency. Relevant for automated price optimization loops.
4385
+ */
4386
+ bid_price?: number;
4387
+ /**
4388
+ * Goal impression count for impression-based packages
4389
+ */
4390
+ impressions?: number;
4391
+ /**
4392
+ * ISO 8601 flight start time for this package. Use to determine whether the package is within its scheduled flight before interpreting delivery status.
4393
+ */
4394
+ start_time?: string;
4395
+ /**
4396
+ * ISO 8601 flight end time for this package
4397
+ */
4398
+ end_time?: string;
4399
+ /**
4400
+ * Whether this package is currently paused by the buyer
4401
+ */
4402
+ paused?: boolean;
4403
+ /**
4404
+ * Approval status for each creative assigned to this package. Absent when no creatives have been assigned.
4405
+ */
4406
+ creative_approvals?: {
4407
+ /**
4408
+ * Creative identifier
4409
+ */
4410
+ creative_id: string;
4411
+ approval_status?: CreativeApprovalStatus;
4412
+ /**
4413
+ * Human-readable explanation of why the creative was rejected. Present only when approval_status is 'rejected'.
4414
+ */
4415
+ rejection_reason?: string;
4416
+ }[];
4417
+ /**
4418
+ * Format IDs from the original create_media_buy format_ids_to_provide that have not yet been uploaded via sync_creatives. When empty or absent, all required formats have been provided.
4419
+ */
4420
+ format_ids_pending?: FormatID[];
4421
+ /**
4422
+ * Machine-readable reason the snapshot is omitted. Present only when include_snapshot was true and snapshot is unavailable for this package.
4423
+ */
4424
+ snapshot_unavailable_reason?: 'SNAPSHOT_UNSUPPORTED' | 'SNAPSHOT_TEMPORARILY_UNAVAILABLE' | 'SNAPSHOT_PERMISSION_DENIED';
4425
+ /**
4426
+ * Near-real-time delivery snapshot for this package. Only present when include_snapshot was true in the request. Represents the latest available entity-level stats from the platform — not billing-grade data.
4427
+ */
4428
+ snapshot?: {
4429
+ /**
4430
+ * ISO 8601 timestamp when this snapshot was captured by the platform
4431
+ */
4432
+ as_of: string;
4433
+ /**
4434
+ * Maximum age of this data in seconds. For example, 900 means the data may be up to 15 minutes old. Use this to interpret zero delivery: a value of 900 means zero impressions is likely real; a value of 14400 means reporting may still be catching up.
4435
+ */
4436
+ staleness_seconds: number;
4437
+ /**
4438
+ * Total impressions delivered since package start
4439
+ */
4440
+ impressions: number;
4441
+ /**
4442
+ * Total spend since package start, denominated in snapshot.currency when present, otherwise package.currency or media_buy.currency
4443
+ */
4444
+ spend: number;
4445
+ /**
4446
+ * ISO 4217 currency code for spend in this snapshot. Optional when unchanged from package.currency or media_buy.currency.
4447
+ */
4448
+ currency?: string;
4449
+ /**
4450
+ * Total clicks since package start (when available)
4451
+ */
4452
+ clicks?: number;
4453
+ /**
4454
+ * Current delivery pace relative to expected (1.0 = on track, <1.0 = behind, >1.0 = ahead). Absent when pacing cannot be determined.
4455
+ */
4456
+ pacing_index?: number;
4457
+ /**
4458
+ * Operational delivery state of this package. 'not_delivering' means the package is within its scheduled flight but has delivered zero impressions for at least one full staleness cycle — the signal for automated price adjustments or buyer alerts. Implementers must not return 'not_delivering' until at least staleness_seconds have elapsed since package activation.
4459
+ */
4460
+ delivery_status?: 'delivering' | 'not_delivering' | 'completed' | 'budget_exhausted' | 'flight_ended' | 'goal_met';
4461
+ ext?: ExtensionObject;
4462
+ };
4463
+ ext?: ExtensionObject;
4464
+ }
4386
4465
  /**
4387
4466
  * Attribution model to use. When omitted, the seller applies their default model.
4388
4467
  */
@@ -8599,11 +8678,7 @@ export interface GetAdCPCapabilitiesResponse {
8599
8678
  */
8600
8679
  account?: {
8601
8680
  /**
8602
- * How the seller resolves account references. explicit_account_id: accounts are managed out-of-band (advertiser portal, sales rep) and discovered via list_accounts. implicit_from_sync: buyer declares intent via sync_accounts and the seller provisions accounts.
8603
- */
8604
- account_resolution?: 'explicit_account_id' | 'implicit_from_sync';
8605
- /**
8606
- * Whether the seller requires operator-level credentials. When false (default), the seller trusts the agent's identity claims — the agent authenticates once and declares brands/operators via sync_accounts. When true, each operator must authenticate independently with the seller, and the agent opens a per-operator session using the operator's credential.
8681
+ * Whether the seller requires operator-level credentials. When true (explicit accounts), operators authenticate independently with the seller and the buyer discovers accounts via list_accounts. When false (default, implicit accounts), the seller trusts the agent's identity claims — the agent authenticates once and declares brands/operators via sync_accounts.
8607
8682
  */
8608
8683
  require_operator_auth?: boolean;
8609
8684
  /**
@@ -8622,6 +8697,10 @@ export interface GetAdCPCapabilitiesResponse {
8622
8697
  * Whether this seller supports the get_account_financials task for querying account-level financial status (spend, credit, invoices). Only applicable to operator-billed accounts.
8623
8698
  */
8624
8699
  account_financials?: boolean;
8700
+ /**
8701
+ * Whether this seller supports sandbox accounts for testing. Buyers can provision a sandbox account via sync_accounts with sandbox: true, and all requests using that account_id will be treated as sandbox — no real platform calls or spend.
8702
+ */
8703
+ sandbox?: boolean;
8625
8704
  };
8626
8705
  /**
8627
8706
  * Media-buy protocol capabilities. Only present if media_buy is in supported_protocols.
@@ -9139,7 +9218,7 @@ export interface SyncAccountsRequest {
9139
9218
  */
9140
9219
  billing: 'operator' | 'agent';
9141
9220
  /**
9142
- * When true, provision this as a sandbox account. No real platform calls or billing. Sandbox accounts are identified by account_id in subsequent requests.
9221
+ * When true, provision this as a sandbox account. No real platform calls or billing. The sandbox flag is part of the natural key — use brand + operator + sandbox: true in subsequent account references.
9143
9222
  */
9144
9223
  sandbox?: boolean;
9145
9224
  }[];