# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand. overlay: 1.0.0 info: title: API Evangelist conversational phrasing for Google Analytics Properties API version: 1.0.0 extends: openapi/google-analytics-properties-api-openapi.yml actions: - target: $.info update: x-apievangelist-phrasing: method: generated generated: '2026-09-26' generator: build-phrasing.py label: Generated by API Evangelist operations: 249 - target: $.paths['/v1beta/properties'].get update: x-apievangelist-phrasing: intent: List GA4 properties under an account effect: read questions: - Which GA4 properties sit under my Google Analytics account? - Can I include trashed properties when listing what an account owns? - What does the properties list return if I have no access to some of them? instructions: - text: List the GA4 properties matching filter {filter}. slots: filter: query.filter - text: 'Show GA4 properties for {filter}, including soft-deleted ones: {showDeleted}.' slots: filter: query.filter showDeleted: query.showDeleted method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties'].post update: x-apievangelist-phrasing: intent: Create a GA4 property effect: write questions: - Can I spin up a new GA4 property through the API instead of the Analytics UI? - What reporting time zone and currency does a new GA4 property need? instructions: - text: Create a GA4 property named {displayName} under account {parent}. slots: displayName: requestBody.displayName parent: requestBody.parent - text: Set up a new GA4 property {displayName} reporting in {timeZone} with currency {currencyCode}. slots: displayName: requestBody.displayName timeZone: requestBody.timeZone currencyCode: requestBody.currencyCode method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{entity}:runAccessReport'].post update: x-apievangelist-phrasing: intent: Report who read GA4 reporting data effect: read questions: - Who on my team has been reading Google Analytics reports, and when? - How far back do data access records go for a GA4 property or account? - Can a data access report be run at the account level rather than one property? instructions: - text: Run a data access report for {entity} covering {dateRanges}. slots: entity: path.entity dateRanges: requestBody.dateRanges - text: Show the top {limit} users who accessed reporting data on {entity}. slots: limit: requestBody.limit entity: path.entity method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{name}'].get update: x-apievangelist-phrasing: intent: Look up one Measurement Protocol secret effect: read questions: - Can I fetch a single Measurement Protocol secret by its full resource name? - What details come back for one GA4 Measurement Protocol API secret? instructions: - text: Look up the Measurement Protocol secret at {name}. slots: name: path.name - text: Fetch secret resource {name} and show its display name and value. slots: name: path.name method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{name}'].delete update: x-apievangelist-phrasing: intent: Remove a Google Ads link by resource name effect: destructive questions: - Can I unlink a Google Ads account from a GA4 property using the link's resource name? - What happens to the connection when a Google Ads link resource is deleted? instructions: - text: Delete the Google Ads link {name}. slots: name: path.name - text: Disconnect Google Ads from the property by removing link resource {name}. slots: name: path.name method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{name}'].patch update: x-apievangelist-phrasing: intent: Update a Google Ads link by resource name effect: write questions: - Can I turn ads personalization on or off for an existing Google Ads link? - Which Google Ads link settings can be changed after it is created? instructions: - text: Update Google Ads link {name} so ads personalization is {adsPersonalizationEnabled}. slots: name: path.name adsPersonalizationEnabled: requestBody.adsPersonalizationEnabled - text: Patch the fields {updateMask} on Google Ads link resource {name}. slots: updateMask: query.updateMask name: path.name method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{name}:archive'].post update: x-apievangelist-phrasing: intent: Archive a custom metric by resource name effect: destructive questions: - Can I retire a custom metric I no longer need from a GA4 property? - What does archiving do to a custom metric identified by its full resource name? instructions: - text: Archive the custom metric {name}. slots: name: path.name - text: Retire custom metric resource {name} so it stops appearing in reports. slots: name: path.name method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/conversionEvents'].get update: x-apievangelist-phrasing: intent: List conversion events on a GA4 property effect: read questions: - Which events are marked as conversions on my GA4 property? - Does the conversion events list come back empty when none are configured? instructions: - text: List the conversion events under {parent}. slots: parent: path.parent - text: Show up to {pageSize} conversions configured on property {parent}. slots: pageSize: query.pageSize parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/conversionEvents'].post update: x-apievangelist-phrasing: intent: Mark an event as a conversion effect: write questions: - Can I flag an event like purchase as a conversion in GA4 programmatically? - Is it possible to set a default conversion value when marking an event as a conversion? instructions: - text: Mark event {eventName} as a conversion on {parent}. slots: eventName: requestBody.eventName parent: path.parent - text: Create a conversion for {eventName} on {parent} counted {countingMethod}. slots: eventName: requestBody.eventName parent: path.parent countingMethod: requestBody.countingMethod method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/customDimensions'].get update: x-apievangelist-phrasing: intent: List custom dimensions on a property effect: read questions: - What custom dimensions have been defined on this GA4 property? - Can I page through a long set of custom dimensions for one property? instructions: - text: List custom dimensions on {parent}. slots: parent: path.parent - text: Return the next page {pageToken} of custom dimensions for {parent}. slots: pageToken: query.pageToken parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/customDimensions'].post update: x-apievangelist-phrasing: intent: Create a custom dimension effect: write questions: - Can I register an event parameter as a custom dimension in GA4? - What scope options exist when defining a new custom dimension? instructions: - text: Create custom dimension {displayName} from parameter {parameterName} on {parent}. slots: displayName: requestBody.displayName parameterName: requestBody.parameterName parent: path.parent - text: Add a {scope}-scoped custom dimension for parameter {parameterName} to {parent}. slots: scope: requestBody.scope parameterName: requestBody.parameterName parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/customMetrics'].get update: x-apievangelist-phrasing: intent: List custom metrics on a property effect: read questions: - Which custom metrics exist on my GA4 property right now? - Is there a page size limit when fetching a property's custom metrics? instructions: - text: List custom metrics under {parent}. slots: parent: path.parent - text: Show {pageSize} custom metrics per page for {parent}. slots: pageSize: query.pageSize parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/customMetrics'].post update: x-apievangelist-phrasing: intent: Create a custom metric effect: write questions: - Can I turn a numeric event parameter into a custom metric? - What measurement units can a GA4 custom metric use, like currency or seconds? instructions: - text: Create custom metric {displayName} from parameter {parameterName} on {parent}. slots: displayName: requestBody.displayName parameterName: requestBody.parameterName parent: path.parent - text: Define a custom metric on {parent} measured in {measurementUnit} for {parameterName}. slots: parent: path.parent measurementUnit: requestBody.measurementUnit parameterName: requestBody.parameterName method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/dataStreams'].get update: x-apievangelist-phrasing: intent: List data streams on a property effect: read questions: - What web and app data streams feed into this GA4 property? - Can I see all of a property's streams in one paged call? instructions: - text: List the data streams on {parent}. slots: parent: path.parent - text: Get the page {pageToken} of streams belonging to {parent}. slots: pageToken: query.pageToken parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/dataStreams'].post update: x-apievangelist-phrasing: intent: Create a web or app data stream effect: write questions: - Can I add a new website stream to a GA4 property from code? - What stream types can I create, web, Android or iOS? instructions: - text: Create a {type} data stream named {displayName} on {parent}. slots: type: requestBody.type displayName: requestBody.displayName parent: path.parent - text: Add a web stream {displayName} for site {webStreamData} to {parent}. slots: displayName: requestBody.displayName webStreamData: requestBody.webStreamData parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/firebaseLinks'].get update: x-apievangelist-phrasing: intent: List Firebase links on a property effect: read questions: - Is my GA4 property linked to a Firebase project? - Can a property have more than one Firebase link? instructions: - text: List Firebase links under {parent}. slots: parent: path.parent - text: Check which Firebase project is attached to {parent}. slots: parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/firebaseLinks'].post update: x-apievangelist-phrasing: intent: Link a Firebase project effect: write questions: - Can I connect a Firebase project to my GA4 property through the API? - What happens if the property already has a Firebase link when I add one? instructions: - text: Link Firebase project {project} to {parent}. slots: project: requestBody.project parent: path.parent - text: Attach Firebase project {project} as the single Firebase link for {parent}. slots: project: requestBody.project parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/googleAdsLinks'].get update: x-apievangelist-phrasing: intent: List Google Ads links on a property effect: read questions: - Which Google Ads accounts are linked to this GA4 property? - Can I page through Google Ads links when a property has many? instructions: - text: List Google Ads links on {parent}. slots: parent: path.parent - text: Show {pageSize} Google Ads links at a time for {parent}. slots: pageSize: query.pageSize parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/googleAdsLinks'].post update: x-apievangelist-phrasing: intent: Link a Google Ads account effect: write questions: - Can I link a Google Ads customer ID to GA4 without using the admin screen? - Is ads personalization settable at the moment a Google Ads link is created? instructions: - text: Link Google Ads customer {customerId} to {parent}. slots: customerId: requestBody.customerId parent: path.parent - text: Create a Google Ads link on {parent} for {customerId} with personalization {adsPersonalizationEnabled}. slots: parent: path.parent customerId: requestBody.customerId adsPersonalizationEnabled: requestBody.adsPersonalizationEnabled method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/measurementProtocolSecrets'].get update: x-apievangelist-phrasing: intent: List Measurement Protocol secrets effect: read questions: - What Measurement Protocol API secrets exist on a data stream? - Can I list the secrets used to send server-side events to GA4? instructions: - text: List Measurement Protocol secrets under {parent}. slots: parent: path.parent - text: Show all API secrets for server-side hits on stream {parent}. slots: parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/measurementProtocolSecrets'].post update: x-apievangelist-phrasing: intent: Create a Measurement Protocol secret effect: write questions: - Can I generate a new API secret for sending Measurement Protocol events? - Do I need to acknowledge user data collection before creating a secret? instructions: - text: Create a Measurement Protocol secret named {displayName} under {parent}. slots: displayName: requestBody.displayName parent: path.parent - text: Generate a server-side events API secret on stream {parent}. slots: parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{property}:acknowledgeUserDataCollection'].post update: x-apievangelist-phrasing: intent: Acknowledge user data collection terms effect: write questions: - Why can't I create a Measurement Protocol secret until I accept user data collection terms? - Can I accept the GA4 user data collection terms through the API? instructions: - text: Acknowledge user data collection for {property}. slots: property: path.property - text: Accept the data collection terms on {property} with acknowledgement {acknowledgement}. slots: property: path.property acknowledgement: requestBody.acknowledgement method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{name}:query'].post update: x-apievangelist-phrasing: intent: Fetch users in an audience export effect: read questions: - How can I pull the actual users from an audience export once it is ready? - Can I page through an exported audience with an offset and limit? instructions: - text: Fetch the users in audience export {name}. slots: name: path.name - text: Return {limit} rows starting at {offset} from audience export {name}. slots: limit: requestBody.limit offset: requestBody.offset name: path.name method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/audienceExports'].get update: x-apievangelist-phrasing: intent: List audience exports for a property effect: read questions: - Which audience exports have already been created for my property? - Can I reuse an existing audience export instead of making a new one? instructions: - text: List audience exports under {parent}. slots: parent: path.parent - text: Show existing audience exports for {parent} so I can reuse one. slots: parent: path.parent method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{parent}/audienceExports'].post update: x-apievangelist-phrasing: intent: Start an audience export effect: write questions: - Can I export the members of a GA4 audience for use elsewhere? - Is an audience export ready immediately or does it build in the background? instructions: - text: Create an audience export of {audience} on {parent}. slots: audience: requestBody.audience parent: path.parent - text: Export audience {audience} for {parent} with dimensions {dimensions}. slots: audience: requestBody.audience parent: path.parent dimensions: requestBody.dimensions method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{property}:batchRunPivotReports'].post update: x-apievangelist-phrasing: intent: Run several pivot reports at once effect: read questions: - Can I run multiple pivot reports in a single request? - Do all pivot reports in one batch have to target the same property? instructions: - text: Run this batch of pivot reports {requests} on {property}. slots: requests: requestBody.requests property: path.property - text: 'Batch these pivot table requests against {property}: {requests}.' slots: property: path.property requests: requestBody.requests method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{property}:batchRunReports'].post update: x-apievangelist-phrasing: intent: Run several standard reports at once effect: read questions: - Can I send several GA4 report requests together to save round trips? - Is there a single call that returns multiple core reports for one property? instructions: - text: Run the batch of reports {requests} for {property}. slots: requests: requestBody.requests property: path.property - text: 'Execute these report definitions together on {property}: {requests}.' slots: property: path.property requests: requestBody.requests method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{property}:checkCompatibility'].post update: x-apievangelist-phrasing: intent: Check which dimensions and metrics combine effect: read questions: - Why does my GA4 report fail when I mix certain dimensions and metrics? - Which dimensions can I still add to a report without breaking it? instructions: - text: Check whether dimensions {dimensions} and metrics {metrics} work together on {property}. slots: dimensions: requestBody.dimensions metrics: requestBody.metrics property: path.property - text: List fields compatible with my report on {property}, filtered by {compatibilityFilter}. slots: property: path.property compatibilityFilter: requestBody.compatibilityFilter method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{property}:runPivotReport'].post update: x-apievangelist-phrasing: intent: Run a pivot report effect: read questions: - Can I build a pivot table of GA4 event data through the API? - In a pivot report, why do dimensions only show up when included in a pivot? instructions: - text: Run a pivot report on {property} with pivots {pivots}. slots: property: path.property pivots: requestBody.pivots - text: Pivot metrics {metrics} by {dimensions} for {property} over {dateRanges}. slots: metrics: requestBody.metrics dimensions: requestBody.dimensions property: path.property dateRanges: requestBody.dateRanges method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{property}:runRealtimeReport'].post update: x-apievangelist-phrasing: intent: Run a realtime report effect: read questions: - How many people are on my site right now according to GA4? - Can realtime data be broken down by minute ranges? instructions: - text: Show realtime {metrics} for {property}. slots: metrics: requestBody.metrics property: path.property - text: Get live activity on {property} for the last {minuteRanges} split by {dimensions}. slots: property: path.property minuteRanges: requestBody.minuteRanges dimensions: requestBody.dimensions method: generated generated: '2026-09-26' - target: $.paths['/v1beta/{property}:runReport'].post update: x-apievangelist-phrasing: intent: Run a standard GA4 report effect: read questions: - How do I pull sessions and users by country from GA4? - Can I sort and limit rows when running a core Google Analytics report? - What date ranges can a single GA4 report cover? instructions: - text: Run a report on {property} of {metrics} by {dimensions}. slots: property: path.property metrics: requestBody.metrics dimensions: requestBody.dimensions - text: Report {metrics} for {property} across {dateRanges}, top {limit} rows. slots: metrics: requestBody.metrics property: path.property dateRanges: requestBody.dateRanges limit: requestBody.limit method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}:acknowledgeUserDataCollection'].post update: x-apievangelist-phrasing: intent: Accept data collection terms (v1alpha) effect: write questions: - On the v1alpha admin API, where do I confirm the user data collection acknowledgement for a property? - Is the alpha acknowledgement call a prerequisite for Measurement Protocol secrets? instructions: - text: Using the alpha admin API, confirm user data collection for property {propertiesId}. slots: propertiesId: path.propertiesId - text: Send acknowledgement {acknowledgement} via v1alpha for property {propertiesId}. slots: acknowledgement: requestBody.acknowledgement propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties'].get update: x-apievangelist-phrasing: intent: List properties via the alpha admin API effect: read questions: - With the v1alpha admin API, can I list every property I can see under an account? - Are trashed properties hidden unless I ask the alpha list call for them? instructions: - text: Using v1alpha, list properties that match {filter}. slots: filter: query.filter - text: Page through alpha property results {pageSize} at a time for {filter}. slots: pageSize: query.pageSize filter: query.filter method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties'].post update: x-apievangelist-phrasing: intent: Create a property via the alpha admin API effect: write questions: - Does the v1alpha admin API let me create a property with an industry category? - Can the alpha create call set a property type such as ordinary or subproperty? instructions: - text: Via v1alpha, create property {displayName} in industry {industryCategory}. slots: displayName: requestBody.displayName industryCategory: requestBody.industryCategory - text: Make an alpha-API property {displayName} of type {propertyType} under {parent}. slots: displayName: requestBody.displayName propertyType: requestBody.propertyType parent: requestBody.parent method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties:createRollupProperty'].post update: x-apievangelist-phrasing: intent: Create a roll-up property with sources effect: write questions: - Can I combine several GA4 properties into one roll-up property? - What source properties does a new roll-up property pull data from? instructions: - text: Create a roll-up property {rollupProperty} fed by {sourceProperties}. slots: rollupProperty: requestBody.rollupProperty sourceProperties: requestBody.sourceProperties - text: Build a roll-up that aggregates properties {sourceProperties}. slots: sourceProperties: requestBody.sourceProperties method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}'].get update: x-apievangelist-phrasing: intent: Get one property (v1alpha) effect: read questions: - Through the alpha admin API, what settings does a single property report? - Can v1alpha tell me a property's service level and time zone? instructions: - text: Using v1alpha, fetch property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show the alpha-API record for property {propertiesId}, including its service level. slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}'].delete update: x-apievangelist-phrasing: intent: Trash a property (v1alpha) effect: destructive questions: - If I trash a property with the v1alpha API, can it still be restored? - How long before a property soft-deleted via alpha is permanently purged? instructions: - text: Using the alpha API, move property {propertiesId} to the trash. slots: propertiesId: path.propertiesId - text: Soft-delete property {propertiesId} through v1alpha. slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}'].patch update: x-apievangelist-phrasing: intent: Update a property (v1alpha) effect: write questions: - Can I rename a property or change its currency via the v1alpha admin API? - Which property fields does the alpha update accept in its update mask? instructions: - text: Via v1alpha, rename property {propertiesId} to {displayName}. slots: propertiesId: path.propertiesId displayName: requestBody.displayName - text: Change the alpha property {propertiesId} time zone to {timeZone}. slots: propertiesId: path.propertiesId timeZone: requestBody.timeZone method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/attributionSettings'].get update: x-apievangelist-phrasing: intent: View a property's attribution settings effect: read questions: - Which attribution model is my GA4 property using for reporting? - What lookback windows are set for acquisition and other key events? instructions: - text: Show attribution settings for property {propertiesId}. slots: propertiesId: path.propertiesId - text: Tell me the reporting attribution model on property {propertiesId}. slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/attributionSettings'].patch update: x-apievangelist-phrasing: intent: Change a property's attribution settings effect: write questions: - Can I switch my property from data-driven to last click attribution? - Is the conversion lookback window adjustable through the API? instructions: - text: Set the reporting attribution model on property {propertiesId} to {reportingAttributionModel}. slots: propertiesId: path.propertiesId reportingAttributionModel: requestBody.reportingAttributionModel - text: Change the acquisition lookback on property {propertiesId} to {acquisitionConversionEventLookbackWindow}. slots: propertiesId: path.propertiesId acquisitionConversionEventLookbackWindow: requestBody.acquisitionConversionEventLookbackWindow method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataRetentionSettings'].get update: x-apievangelist-phrasing: intent: View data retention settings (v1alpha) effect: read questions: - Using the alpha admin API, how long is event data retained on a property? - Does v1alpha show whether user data resets on new activity? instructions: - text: Via v1alpha, show how long property {propertiesId} keeps event data. slots: propertiesId: path.propertiesId - text: Read alpha retention settings for property {propertiesId}. slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataRetentionSettings'].patch update: x-apievangelist-phrasing: intent: Change data retention settings (v1alpha) effect: write questions: - With the v1alpha API, can I extend event data retention to 14 months? - Can the alpha retention update turn off resetting user data on new activity? instructions: - text: Via v1alpha, set event data retention on property {propertiesId} to {eventDataRetention}. slots: propertiesId: path.propertiesId eventDataRetention: requestBody.eventDataRetention - text: Using alpha, set user data retention for property {propertiesId} to {userDataRetention}. slots: propertiesId: path.propertiesId userDataRetention: requestBody.userDataRetention method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/googleSignalsSettings'].get update: x-apievangelist-phrasing: intent: View Google Signals settings effect: read questions: - Is Google Signals turned on for my GA4 property? - Has consent been recorded for Google Signals on this property? instructions: - text: Show Google Signals status for property {propertiesId}. slots: propertiesId: path.propertiesId - text: Check whether property {propertiesId} has Google Signals consent. slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/googleSignalsSettings'].patch update: x-apievangelist-phrasing: intent: Turn Google Signals on or off effect: write questions: - Can I enable Google Signals for cross-device reporting through the API? - What consent value does Google Signals need before it can be switched on? instructions: - text: Set Google Signals on property {propertiesId} to {state}. slots: propertiesId: path.propertiesId state: requestBody.state - text: Record Google Signals consent {consent} for property {propertiesId}. slots: consent: requestBody.consent propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportingIdentitySettings'].get update: x-apievangelist-phrasing: intent: View reporting identity settings effect: read questions: - Which reporting identity is my property using, blended or device-based? - Where can I read the reporting identity configured for a GA4 property? instructions: - text: Show the reporting identity for property {propertiesId}. slots: propertiesId: path.propertiesId - text: Tell me how property {propertiesId} identifies users in reports. slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportingIdentitySettings'].patch update: x-apievangelist-phrasing: intent: Change the reporting identity effect: write questions: - Can I switch my property's reporting identity to device-based through the API? - Is the reporting identity setting editable after a property is live? instructions: - text: Set the reporting identity on property {propertiesId} to {reportingIdentity}. slots: propertiesId: path.propertiesId reportingIdentity: requestBody.reportingIdentity - text: Switch property {propertiesId} to reporting identity {reportingIdentity} using mask {updateMask}. slots: propertiesId: path.propertiesId reportingIdentity: requestBody.reportingIdentity updateMask: query.updateMask method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/userProvidedDataSettings'].get update: x-apievangelist-phrasing: intent: View user-provided data settings effect: read questions: - Is user-provided data collection enabled on my GA4 property? - What settings control user-provided data like hashed emails on a property? instructions: - text: Show user-provided data settings for property {propertiesId}. slots: propertiesId: path.propertiesId - text: Look up whether property {propertiesId} collects user-provided data. slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties:provisionSubproperty'].post update: x-apievangelist-phrasing: intent: Create a subproperty with an event filter effect: write questions: - Can I carve out a subproperty that only receives some of a property's events? - When provisioning a subproperty, can custom dimensions and metrics sync automatically? instructions: - text: Provision subproperty {subproperty} with event filter {subpropertyEventFilter}. slots: subproperty: requestBody.subproperty subpropertyEventFilter: requestBody.subpropertyEventFilter - text: Create subproperty {subproperty} using sync mode {customDimensionAndMetricSynchronizationMode}. slots: subproperty: requestBody.subproperty customDimensionAndMetricSynchronizationMode: requestBody.customDimensionAndMetricSynchronizationMode method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}:runAccessReport'].post update: x-apievangelist-phrasing: intent: Audit reporting data access (v1alpha) effect: read questions: - Using the alpha admin API, can I audit which users viewed a property's reports? - Does the v1alpha access report let me include users who never accessed data? instructions: - text: Via v1alpha, run an access audit for property {propertiesId} over {dateRanges}. slots: propertiesId: path.propertiesId dateRanges: requestBody.dateRanges - text: 'Alpha access report on property {propertiesId}, including all users: {includeAllUsers}.' slots: propertiesId: path.propertiesId includeAllUsers: requestBody.includeAllUsers method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}:submitUserDeletion'].post update: x-apievangelist-phrasing: intent: Request deletion of a user's data effect: destructive questions: - How do I delete everything GA4 holds about one user for a privacy request? - Can I request user deletion by client ID or app instance ID instead of user ID? instructions: - text: Submit a user deletion for user {userId} on property {propertiesId}. slots: userId: requestBody.userId propertiesId: path.propertiesId - text: Erase data for client {clientId} from property {propertiesId}. slots: clientId: requestBody.clientId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings:batchCreate'].post update: x-apievangelist-phrasing: intent: Grant access to several users at once effect: write questions: - Can I add many users to a property in one all-or-nothing request? - If one access binding fails in a batch, are the others still created? instructions: - text: 'Grant these access bindings on property {propertiesId}: {requests}.' slots: propertiesId: path.propertiesId requests: requestBody.requests - text: Batch add users {requests} to property {propertiesId}. slots: requests: requestBody.requests propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings:batchDelete'].post update: x-apievangelist-phrasing: intent: Remove several users' access at once effect: destructive questions: - Can I revoke access for multiple users on a property in a single call? - Is there a bulk way to remove people from a GA4 property? instructions: - text: Remove access bindings {requests} from property {propertiesId}. slots: requests: requestBody.requests propertiesId: path.propertiesId - text: 'Batch revoke these users on property {propertiesId}: {requests}.' slots: propertiesId: path.propertiesId requests: requestBody.requests method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings:batchGet'].get update: x-apievangelist-phrasing: intent: Look up several access bindings by name effect: read questions: - Can I fetch a handful of specific access bindings by name in one request? - What roles do these particular users hold on my property? instructions: - text: Get access bindings {names} on property {propertiesId}. slots: names: query.names propertiesId: path.propertiesId - text: Batch fetch the named bindings {names} for property {propertiesId}. slots: names: query.names propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings:batchUpdate'].post update: x-apievangelist-phrasing: intent: Change roles for several users at once effect: write questions: - Can I update the roles of many users on a property together? - Is there a bulk edit for access binding roles? instructions: - text: 'Update these access bindings on property {propertiesId}: {requests}.' slots: propertiesId: path.propertiesId requests: requestBody.requests - text: Batch change user roles {requests} on property {propertiesId}. slots: requests: requestBody.requests propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings'].get update: x-apievangelist-phrasing: intent: List who has access to a property effect: read questions: - Who has access to my GA4 property and with what roles? - Can I page through every user permission on a property? instructions: - text: List all access bindings on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show users and roles on property {propertiesId}, {pageSize} per page. slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings'].post update: x-apievangelist-phrasing: intent: Give a user access to a property effect: write questions: - Can I add a colleague as a viewer on a GA4 property programmatically? - Which roles can I assign when granting someone property access? instructions: - text: Grant {user} the roles {roles} on property {propertiesId}. slots: user: requestBody.user roles: requestBody.roles propertiesId: path.propertiesId - text: Add user {user} to property {propertiesId}. slots: user: requestBody.user propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings/{accessBindingsId}'].get update: x-apievangelist-phrasing: intent: Get one user's access binding effect: read questions: - What role does a specific access binding give on my property? - Can I look up a single permission entry by its binding ID? instructions: - text: Show access binding {accessBindingsId} on property {propertiesId}. slots: accessBindingsId: path.accessBindingsId propertiesId: path.propertiesId - text: Tell me which user and roles binding {accessBindingsId} holds on property {propertiesId}. slots: accessBindingsId: path.accessBindingsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings/{accessBindingsId}'].delete update: x-apievangelist-phrasing: intent: Revoke one user's access effect: destructive questions: - How do I remove a single person's access to a GA4 property? - Does deleting an access binding immediately cut off that user? instructions: - text: Delete access binding {accessBindingsId} from property {propertiesId}. slots: accessBindingsId: path.accessBindingsId propertiesId: path.propertiesId - text: Revoke the permission {accessBindingsId} on property {propertiesId}. slots: accessBindingsId: path.accessBindingsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/accessBindings/{accessBindingsId}'].patch update: x-apievangelist-phrasing: intent: Change one user's roles effect: write questions: - Can I promote a viewer to editor on my property through the API? - Which part of an existing access binding can be edited? instructions: - text: Set roles {roles} on access binding {accessBindingsId} for property {propertiesId}. slots: roles: requestBody.roles accessBindingsId: path.accessBindingsId propertiesId: path.propertiesId - text: Update binding {accessBindingsId} on property {propertiesId} to grant {roles}. slots: accessBindingsId: path.accessBindingsId propertiesId: path.propertiesId roles: requestBody.roles method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/adSenseLinks'].get update: x-apievangelist-phrasing: intent: List AdSense links on a property effect: read questions: - Which AdSense accounts are connected to my GA4 property? - Can I page through a property's AdSense links? instructions: - text: List AdSense links on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show AdSense connections for property {propertiesId}, page {pageToken}. slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/adSenseLinks'].post update: x-apievangelist-phrasing: intent: Link an AdSense account effect: write questions: - Can I link my AdSense ad client to a GA4 property with the API? - What identifier does an AdSense link need? instructions: - text: Link AdSense ad client {adClientCode} to property {propertiesId}. slots: adClientCode: requestBody.adClientCode propertiesId: path.propertiesId - text: Create an AdSense link for code {adClientCode} on property {propertiesId}. slots: adClientCode: requestBody.adClientCode propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/adSenseLinks/{adSenseLinksId}'].get update: x-apievangelist-phrasing: intent: Get one AdSense link effect: read questions: - Which ad client code does a particular AdSense link point to? - Can I retrieve a single AdSense link by its ID? instructions: - text: Show AdSense link {adSenseLinksId} on property {propertiesId}. slots: adSenseLinksId: path.adSenseLinksId propertiesId: path.propertiesId - text: Look up the ad client behind AdSense link {adSenseLinksId} for property {propertiesId}. slots: adSenseLinksId: path.adSenseLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/adSenseLinks/{adSenseLinksId}'].delete update: x-apievangelist-phrasing: intent: Unlink an AdSense account effect: destructive questions: - How can I disconnect AdSense from my GA4 property? - Is removing an AdSense link reversible? instructions: - text: Delete AdSense link {adSenseLinksId} from property {propertiesId}. slots: adSenseLinksId: path.adSenseLinksId propertiesId: path.propertiesId - text: Unlink AdSense connection {adSenseLinksId} on property {propertiesId}. slots: adSenseLinksId: path.adSenseLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audiences/{audiencesId}:archive'].post update: x-apievangelist-phrasing: intent: Archive an audience effect: destructive questions: - Can I archive a GA4 audience I no longer use? - What happens to an audience once it has been archived? instructions: - text: Archive audience {audiencesId} on property {propertiesId}. slots: audiencesId: path.audiencesId propertiesId: path.propertiesId - text: Retire the audience {audiencesId} from property {propertiesId}. slots: audiencesId: path.audiencesId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audiences'].get update: x-apievangelist-phrasing: intent: List audiences on a property effect: read questions: - What audiences are defined on my GA4 property? - Why don't default audiences show their filter definitions when listed? instructions: - text: List audiences on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show {pageSize} audiences per page for property {propertiesId}. slots: pageSize: query.pageSize propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audiences'].post update: x-apievangelist-phrasing: intent: Create an audience effect: write questions: - Can I define a new remarketing audience with filter clauses via the API? - How long can membership last in an audience I create? instructions: - text: Create audience {displayName} on property {propertiesId} with filters {filterClauses}. slots: displayName: requestBody.displayName propertiesId: path.propertiesId filterClauses: requestBody.filterClauses - text: Build an audience {displayName} lasting {membershipDurationDays} days on property {propertiesId}. slots: displayName: requestBody.displayName membershipDurationDays: requestBody.membershipDurationDays propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audiences/{audiencesId}'].get update: x-apievangelist-phrasing: intent: Get one audience's definition effect: read questions: - What filters define a specific audience on my property? - Are audiences created before 2020 retrievable? instructions: - text: Show audience {audiencesId} on property {propertiesId}. slots: audiencesId: path.audiencesId propertiesId: path.propertiesId - text: Fetch the filter clauses of audience {audiencesId} in property {propertiesId}. slots: audiencesId: path.audiencesId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audiences/{audiencesId}'].patch update: x-apievangelist-phrasing: intent: Update an audience effect: write questions: - Can I rename an existing audience or change its description? - Is ads personalization changeable on an audience after creation? instructions: - text: Rename audience {audiencesId} on property {propertiesId} to {displayName}. slots: audiencesId: path.audiencesId propertiesId: path.propertiesId displayName: requestBody.displayName - text: Update audience {audiencesId} in property {propertiesId} with description {description}. slots: audiencesId: path.audiencesId propertiesId: path.propertiesId description: requestBody.description method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/bigQueryLinks'].get update: x-apievangelist-phrasing: intent: List BigQuery export links effect: read questions: - Is my GA4 property exporting to BigQuery, and to which project? - Can I list every BigQuery link on a property? instructions: - text: List BigQuery links on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show BigQuery export connections for property {propertiesId}, {pageSize} at a time. slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/bigQueryLinks'].post update: x-apievangelist-phrasing: intent: Set up a BigQuery export effect: write questions: - Can I start exporting GA4 events to BigQuery through the API? - Can the BigQuery export run daily, streaming, or both? - Which events can I exclude from the BigQuery export? instructions: - text: Link property {propertiesId} to BigQuery project {project} in {datasetLocation}. slots: propertiesId: path.propertiesId project: requestBody.project datasetLocation: requestBody.datasetLocation - text: Create a BigQuery export for property {propertiesId} with streaming {streamingExportEnabled}. slots: propertiesId: path.propertiesId streamingExportEnabled: requestBody.streamingExportEnabled method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/bigQueryLinks/{bigQueryLinksId}'].get update: x-apievangelist-phrasing: intent: Get one BigQuery link effect: read questions: - What dataset location and export mode does a BigQuery link use? - Can I inspect one BigQuery link by its ID? instructions: - text: Show BigQuery link {bigQueryLinksId} on property {propertiesId}. slots: bigQueryLinksId: path.bigQueryLinksId propertiesId: path.propertiesId - text: Check export settings of BigQuery link {bigQueryLinksId} for property {propertiesId}. slots: bigQueryLinksId: path.bigQueryLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/bigQueryLinks/{bigQueryLinksId}'].delete update: x-apievangelist-phrasing: intent: Stop a BigQuery export effect: destructive questions: - How do I turn off the BigQuery export for a GA4 property? - Does deleting a BigQuery link remove data already exported? instructions: - text: Delete BigQuery link {bigQueryLinksId} from property {propertiesId}. slots: bigQueryLinksId: path.bigQueryLinksId propertiesId: path.propertiesId - text: Stop exporting via BigQuery link {bigQueryLinksId} on property {propertiesId}. slots: bigQueryLinksId: path.bigQueryLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/bigQueryLinks/{bigQueryLinksId}'].patch update: x-apievangelist-phrasing: intent: Change BigQuery export settings effect: write questions: - Can I switch an existing BigQuery export from daily to fresh daily? - Can I add excluded events to a BigQuery link that is already set up? instructions: - text: Update BigQuery link {bigQueryLinksId} on property {propertiesId} to exclude events {excludedEvents}. slots: bigQueryLinksId: path.bigQueryLinksId propertiesId: path.propertiesId excludedEvents: requestBody.excludedEvents - text: Turn daily export {dailyExportEnabled} on BigQuery link {bigQueryLinksId} for property {propertiesId}. slots: dailyExportEnabled: requestBody.dailyExportEnabled bigQueryLinksId: path.bigQueryLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/calculatedMetrics'].get update: x-apievangelist-phrasing: intent: List calculated metrics effect: read questions: - What calculated metrics exist on my GA4 property? - Can I page through a property's formula-based metrics? instructions: - text: List calculated metrics on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show formula metrics for property {propertiesId}, page {pageToken}. slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/calculatedMetrics'].post update: x-apievangelist-phrasing: intent: Create a calculated metric effect: write questions: - Can I define a metric as a formula of other metrics in GA4? - What units can a calculated metric be expressed in? instructions: - text: Create calculated metric {displayName} with formula {formula} on property {propertiesId}. slots: displayName: requestBody.displayName formula: requestBody.formula propertiesId: path.propertiesId - text: Add a calculated metric {calculatedMetricId} in unit {metricUnit} to property {propertiesId}. slots: calculatedMetricId: query.calculatedMetricId metricUnit: requestBody.metricUnit propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/calculatedMetrics/{calculatedMetricsId}'].get update: x-apievangelist-phrasing: intent: Get one calculated metric effect: read questions: - What formula is behind a particular calculated metric? - Does a calculated metric report any invalid metric references? instructions: - text: Show calculated metric {calculatedMetricsId} on property {propertiesId}. slots: calculatedMetricsId: path.calculatedMetricsId propertiesId: path.propertiesId - text: Read the formula of calculated metric {calculatedMetricsId} in property {propertiesId}. slots: calculatedMetricsId: path.calculatedMetricsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/calculatedMetrics/{calculatedMetricsId}'].delete update: x-apievangelist-phrasing: intent: Delete a calculated metric effect: destructive questions: - Can I permanently remove a calculated metric from my property? - Is there a way to delete a formula metric I created by mistake? instructions: - text: Delete calculated metric {calculatedMetricsId} from property {propertiesId}. slots: calculatedMetricsId: path.calculatedMetricsId propertiesId: path.propertiesId - text: Remove formula metric {calculatedMetricsId} on property {propertiesId}. slots: calculatedMetricsId: path.calculatedMetricsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/calculatedMetrics/{calculatedMetricsId}'].patch update: x-apievangelist-phrasing: intent: Update a calculated metric effect: write questions: - Can I change the formula of an existing calculated metric? - Which fields of a calculated metric can I rename or edit? instructions: - text: Change the formula of calculated metric {calculatedMetricsId} on property {propertiesId} to {formula}. slots: calculatedMetricsId: path.calculatedMetricsId propertiesId: path.propertiesId formula: requestBody.formula - text: Rename calculated metric {calculatedMetricsId} in property {propertiesId} to {displayName}. slots: calculatedMetricsId: path.calculatedMetricsId propertiesId: path.propertiesId displayName: requestBody.displayName method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/channelGroups'].get update: x-apievangelist-phrasing: intent: List channel groups effect: read questions: - Which channel groupings are set up on my GA4 property? - Can I see both system-defined and custom channel groups? instructions: - text: List channel groups on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show traffic channel groupings for property {propertiesId}, {pageSize} per page. slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/channelGroups'].post update: x-apievangelist-phrasing: intent: Create a custom channel group effect: write questions: - Can I build my own channel grouping rules for traffic sources? - Can a new channel group be made the primary one for reports? instructions: - text: Create channel group {displayName} on property {propertiesId} with rules {groupingRule}. slots: displayName: requestBody.displayName propertiesId: path.propertiesId groupingRule: requestBody.groupingRule - text: Add a channel grouping {displayName} to property {propertiesId}, primary {primary}. slots: displayName: requestBody.displayName propertiesId: path.propertiesId primary: requestBody.primary method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/channelGroups/{channelGroupsId}'].get update: x-apievangelist-phrasing: intent: Get one channel group effect: read questions: - What grouping rules does a specific channel group apply? - Is a given channel group system-defined or custom? instructions: - text: Show channel group {channelGroupsId} on property {propertiesId}. slots: channelGroupsId: path.channelGroupsId propertiesId: path.propertiesId - text: Read the rules of channel group {channelGroupsId} in property {propertiesId}. slots: channelGroupsId: path.channelGroupsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/channelGroups/{channelGroupsId}'].delete update: x-apievangelist-phrasing: intent: Delete a channel group effect: destructive questions: - Can I delete a custom channel grouping I no longer want? - Is it possible to remove a channel group from a property via the API? instructions: - text: Delete channel group {channelGroupsId} from property {propertiesId}. slots: channelGroupsId: path.channelGroupsId propertiesId: path.propertiesId - text: Remove the custom channel grouping {channelGroupsId} on property {propertiesId}. slots: channelGroupsId: path.channelGroupsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/channelGroups/{channelGroupsId}'].patch update: x-apievangelist-phrasing: intent: Update a channel group effect: write questions: - Can I edit the rules of an existing channel group? - How can I make an existing channel group the primary grouping? instructions: - text: Update grouping rules of channel group {channelGroupsId} on property {propertiesId} to {groupingRule}. slots: channelGroupsId: path.channelGroupsId propertiesId: path.propertiesId groupingRule: requestBody.groupingRule - text: Make channel group {channelGroupsId} primary {primary} on property {propertiesId}. slots: channelGroupsId: path.channelGroupsId primary: requestBody.primary propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/conversionEvents'].get update: x-apievangelist-phrasing: intent: List conversion events (deprecated, v1alpha) effect: read questions: - On the alpha API, can I still list conversion events even though key events replaced them? - Does the deprecated v1alpha conversion list return nothing when none exist? instructions: - text: Using the deprecated alpha endpoint, list conversion events for property {propertiesId}. slots: propertiesId: path.propertiesId - text: Via v1alpha legacy conversions, page {pageToken} for property {propertiesId}. slots: pageToken: query.pageToken propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/conversionEvents'].post update: x-apievangelist-phrasing: intent: Create a conversion event (deprecated, v1alpha) effect: write questions: - Is the v1alpha conversion event create call deprecated in favor of key events? - With the old alpha conversion endpoint, can I set a default conversion value? instructions: - text: Via the deprecated v1alpha endpoint, mark {eventName} as a conversion on property {propertiesId}. slots: eventName: requestBody.eventName propertiesId: path.propertiesId - text: Using legacy alpha conversions, add {eventName} with default value {defaultConversionValue} to property {propertiesId}. slots: eventName: requestBody.eventName defaultConversionValue: requestBody.defaultConversionValue propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/conversionEvents/{conversionEventsId}'].get update: x-apievangelist-phrasing: intent: Get a conversion event (deprecated, v1alpha) effect: read questions: - Can the legacy v1alpha API still return one conversion event by ID? - What counting method does a single alpha conversion event use? instructions: - text: Using deprecated v1alpha, fetch conversion event {conversionEventsId} on property {propertiesId}. slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId - text: Show legacy alpha conversion {conversionEventsId} for property {propertiesId}. slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/conversionEvents/{conversionEventsId}'].delete update: x-apievangelist-phrasing: intent: Delete a conversion event (deprecated, v1alpha) effect: destructive questions: - Through the deprecated alpha endpoint, can I unmark an event as a conversion? - Is deleting a v1alpha conversion event the same as removing a key event? instructions: - text: Using legacy v1alpha, delete conversion event {conversionEventsId} from property {propertiesId}. slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId - text: Unmark alpha conversion {conversionEventsId} on property {propertiesId}. slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/conversionEvents/{conversionEventsId}'].patch update: x-apievangelist-phrasing: intent: Update a conversion event (deprecated, v1alpha) effect: write questions: - Can I change the counting method of a conversion through the deprecated v1alpha API? - Is the alpha conversion update still supported now that key events exist? instructions: - text: Via deprecated v1alpha, set counting method {countingMethod} on conversion {conversionEventsId} in property {propertiesId}. slots: countingMethod: requestBody.countingMethod conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId - text: 'Legacy alpha: change default value of conversion {conversionEventsId} on property {propertiesId} to {defaultConversionValue}.' slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId defaultConversionValue: requestBody.defaultConversionValue method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customDimensions/{customDimensionsId}:archive'].post update: x-apievangelist-phrasing: intent: Archive a custom dimension (v1alpha) effect: destructive questions: - Using the v1alpha API, can I archive a custom dimension I stopped collecting? - Does archiving a dimension through alpha free up a custom dimension slot? instructions: - text: Via v1alpha, archive custom dimension {customDimensionsId} on property {propertiesId}. slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId - text: 'Alpha API: retire dimension {customDimensionsId} from property {propertiesId}.' slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customDimensions'].get update: x-apievangelist-phrasing: intent: List custom dimensions (v1alpha) effect: read questions: - With the alpha admin API, which custom dimensions does a property define? - Can I page v1alpha custom dimensions with a page token? instructions: - text: Using v1alpha, list custom dimensions for property {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Alpha API: show dimensions on property {propertiesId}, {pageSize} per page.' slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customDimensions'].post update: x-apievangelist-phrasing: intent: Create a custom dimension (v1alpha) effect: write questions: - Through the v1alpha API, can I create a user-scoped custom dimension? - Why is sending user IDs in an alpha custom dimension against the terms? instructions: - text: Via v1alpha, create dimension {displayName} for parameter {parameterName} on property {propertiesId}. slots: displayName: requestBody.displayName parameterName: requestBody.parameterName propertiesId: path.propertiesId - text: 'Alpha API: add scope {scope} dimension {displayName} to property {propertiesId}.' slots: scope: requestBody.scope displayName: requestBody.displayName propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customDimensions/{customDimensionsId}'].get update: x-apievangelist-phrasing: intent: Get a custom dimension (v1alpha) effect: read questions: - Using v1alpha, which event parameter backs a given custom dimension? - Can the alpha API show a single dimension's scope? instructions: - text: Via v1alpha, fetch custom dimension {customDimensionsId} on property {propertiesId}. slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId - text: 'Alpha API: show the parameter behind dimension {customDimensionsId} in property {propertiesId}.' slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customDimensions/{customDimensionsId}'].patch update: x-apievangelist-phrasing: intent: Update a custom dimension (v1alpha) effect: write questions: - With the alpha API, can I rename a custom dimension or edit its description? - Can v1alpha change whether a dimension disallows ads personalization? instructions: - text: Via v1alpha, rename dimension {customDimensionsId} on property {propertiesId} to {displayName}. slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId displayName: requestBody.displayName - text: 'Alpha API: set disallow ads personalization {disallowAdsPersonalization} on dimension {customDimensionsId} in property {propertiesId}.' slots: disallowAdsPersonalization: requestBody.disallowAdsPersonalization customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customMetrics/{customMetricsId}:archive'].post update: x-apievangelist-phrasing: intent: Archive a custom metric (v1alpha) effect: destructive questions: - Can the v1alpha API archive a custom metric by its ID? - After an alpha archive, does the metric disappear from new reports? instructions: - text: Via v1alpha, archive custom metric {customMetricsId} on property {propertiesId}. slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId - text: 'Alpha API: retire metric {customMetricsId} from property {propertiesId}.' slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customMetrics'].get update: x-apievangelist-phrasing: intent: List custom metrics (v1alpha) effect: read questions: - Using the alpha admin API, what custom metrics are on a property? - Does v1alpha paginate the custom metrics list? instructions: - text: Via v1alpha, list custom metrics for property {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Alpha API: page {pageToken} of metrics on property {propertiesId}.' slots: pageToken: query.pageToken propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customMetrics'].post update: x-apievangelist-phrasing: intent: Create a custom metric (v1alpha) effect: write questions: - With v1alpha, can I create a custom metric flagged as restricted cost or revenue data? - Which scope does an alpha-created custom metric use? instructions: - text: Via v1alpha, create metric {displayName} for parameter {parameterName} on property {propertiesId}. slots: displayName: requestBody.displayName parameterName: requestBody.parameterName propertiesId: path.propertiesId - text: 'Alpha API: add metric {displayName} with restricted type {restrictedMetricType} to property {propertiesId}.' slots: displayName: requestBody.displayName restrictedMetricType: requestBody.restrictedMetricType propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customMetrics/{customMetricsId}'].get update: x-apievangelist-phrasing: intent: Get a custom metric (v1alpha) effect: read questions: - Through v1alpha, what measurement unit does one custom metric use? - Can the alpha API return a single custom metric's parameter name? instructions: - text: Via v1alpha, fetch custom metric {customMetricsId} on property {propertiesId}. slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId - text: 'Alpha API: show unit and parameter of metric {customMetricsId} in property {propertiesId}.' slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/customMetrics/{customMetricsId}'].patch update: x-apievangelist-phrasing: intent: Update a custom metric (v1alpha) effect: write questions: - With the alpha API, can I change a custom metric's measurement unit? - Is a custom metric's description editable through v1alpha? instructions: - text: Via v1alpha, set unit {measurementUnit} on metric {customMetricsId} in property {propertiesId}. slots: measurementUnit: requestBody.measurementUnit customMetricsId: path.customMetricsId propertiesId: path.propertiesId - text: 'Alpha API: rename metric {customMetricsId} on property {propertiesId} to {displayName}.' slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId displayName: requestBody.displayName method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams'].get update: x-apievangelist-phrasing: intent: List data streams (v1alpha) effect: read questions: - Using v1alpha, which data streams belong to a property? - Does the alpha stream list include app streams as well as web? instructions: - text: Via v1alpha, list data streams for property {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Alpha API: show streams on property {propertiesId}, {pageSize} per page.' slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams'].post update: x-apievangelist-phrasing: intent: Create a data stream (v1alpha) effect: write questions: - Can the v1alpha API create an iOS app stream for a property? - What stream data does an alpha-created Android stream need? instructions: - text: Via v1alpha, create a {type} stream {displayName} on property {propertiesId}. slots: type: requestBody.type displayName: requestBody.displayName propertiesId: path.propertiesId - text: 'Alpha API: add an iOS stream with {iosAppStreamData} to property {propertiesId}.' slots: iosAppStreamData: requestBody.iosAppStreamData propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}'].get update: x-apievangelist-phrasing: intent: Get a data stream (v1alpha) effect: read questions: - Using v1alpha, what measurement ID and URL does a web stream have? - Can the alpha API return one stream's type and display name? instructions: - text: Via v1alpha, fetch stream {dataStreamsId} on property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Alpha API: show details of data stream {dataStreamsId} in property {propertiesId}.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}'].delete update: x-apievangelist-phrasing: intent: Delete a data stream (v1alpha) effect: destructive questions: - With the v1alpha API, can I remove a web or app stream from a property? - Does deleting a stream through alpha stop data collection for it? instructions: - text: Via v1alpha, delete stream {dataStreamsId} from property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Alpha API: remove data stream {dataStreamsId} on property {propertiesId}.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}'].patch update: x-apievangelist-phrasing: intent: Update a data stream (v1alpha) effect: write questions: - Can the alpha API rename a data stream? - Through v1alpha, which web stream fields can I change? instructions: - text: Via v1alpha, rename stream {dataStreamsId} on property {propertiesId} to {displayName}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId displayName: requestBody.displayName - text: 'Alpha API: update web settings {webStreamData} on stream {dataStreamsId} of property {propertiesId}.' slots: webStreamData: requestBody.webStreamData dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/dataRedactionSettings'].get update: x-apievangelist-phrasing: intent: View a stream's data redaction settings effect: read questions: - Is email redaction turned on for my web stream? - Which query parameters are being redacted before data reaches GA4? instructions: - text: Show data redaction settings for stream {dataStreamsId} on property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: List redacted query parameter keys on stream {dataStreamsId} in property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/dataRedactionSettings'].patch update: x-apievangelist-phrasing: intent: Change a stream's data redaction settings effect: write questions: - Can I make GA4 strip email addresses from collected data? - Can I add query parameters to redact on a web stream? instructions: - text: Turn email redaction {emailRedactionEnabled} on stream {dataStreamsId} of property {propertiesId}. slots: emailRedactionEnabled: requestBody.emailRedactionEnabled dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Redact query keys {queryParameterKeys} on stream {dataStreamsId} in property {propertiesId}. slots: queryParameterKeys: requestBody.queryParameterKeys dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/enhancedMeasurementSettings'].get update: x-apievangelist-phrasing: intent: View enhanced measurement settings effect: read questions: - Which enhanced measurement events like scrolls or file downloads are on for my stream? - Is site search tracking enabled, and with which query parameter? instructions: - text: Show enhanced measurement settings for stream {dataStreamsId} on property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Check if scroll and outbound click tracking are on for stream {dataStreamsId} in property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/enhancedMeasurementSettings'].patch update: x-apievangelist-phrasing: intent: Change enhanced measurement settings effect: write questions: - Can I turn off automatic scroll tracking on a web stream? - Can I change which URL parameter GA4 treats as a site search? instructions: - text: Set scroll tracking {scrollsEnabled} on stream {dataStreamsId} of property {propertiesId}. slots: scrollsEnabled: requestBody.scrollsEnabled dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Use {searchQueryParameter} as the site search parameter for stream {dataStreamsId} in property {propertiesId}. slots: searchQueryParameter: requestBody.searchQueryParameter dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/globalSiteTag'].get update: x-apievangelist-phrasing: intent: Get the site tag snippet for a web stream effect: read questions: - Where can I get the gtag snippet to install on my website? - Can the site tag for a web stream be changed, or is it fixed? instructions: - text: Get the site tag for web stream {dataStreamsId} on property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Give me the tracking snippet to paste for stream {dataStreamsId} in property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventCreateRules'].get update: x-apievangelist-phrasing: intent: List event create rules on a stream effect: read questions: - What rules create new events from existing ones on my web stream? - Can I page through event create rules for a stream? instructions: - text: List event create rules on stream {dataStreamsId} of property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Show rules that derive new events for stream {dataStreamsId} in property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventCreateRules'].post update: x-apievangelist-phrasing: intent: Create an event from matching events effect: write questions: - Can I make GA4 fire a new event whenever an existing event matches conditions? - Can a create rule copy parameters from the source event? instructions: - text: Create a rule on stream {dataStreamsId} of property {propertiesId} that emits {destinationEvent} when {eventConditions}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId destinationEvent: requestBody.destinationEvent eventConditions: requestBody.eventConditions - text: Add event create rule for {destinationEvent} copying source params {sourceCopyParameters} on stream {dataStreamsId} in property {propertiesId}. slots: destinationEvent: requestBody.destinationEvent sourceCopyParameters: requestBody.sourceCopyParameters dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventCreateRules/{eventCreateRulesId}'].get update: x-apievangelist-phrasing: intent: Get one event create rule effect: read questions: - What conditions trigger a specific event create rule? - Which destination event does a given create rule produce? instructions: - text: Show event create rule {eventCreateRulesId} on stream {dataStreamsId} of property {propertiesId}. slots: eventCreateRulesId: path.eventCreateRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Read the conditions of create rule {eventCreateRulesId} for stream {dataStreamsId} in property {propertiesId}. slots: eventCreateRulesId: path.eventCreateRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventCreateRules/{eventCreateRulesId}'].delete update: x-apievangelist-phrasing: intent: Delete an event create rule effect: destructive questions: - Can I stop GA4 from generating a derived event by removing its create rule? - Is deleting an event create rule immediate? instructions: - text: Delete event create rule {eventCreateRulesId} on stream {dataStreamsId} of property {propertiesId}. slots: eventCreateRulesId: path.eventCreateRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Remove create rule {eventCreateRulesId} from stream {dataStreamsId} in property {propertiesId}. slots: eventCreateRulesId: path.eventCreateRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventCreateRules/{eventCreateRulesId}'].patch update: x-apievangelist-phrasing: intent: Update an event create rule effect: write questions: - Can I change the matching conditions on an existing event create rule? - Can the parameter mutations of a create rule be edited later? instructions: - text: Update conditions of create rule {eventCreateRulesId} on stream {dataStreamsId} of property {propertiesId} to {eventConditions}. slots: eventCreateRulesId: path.eventCreateRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId eventConditions: requestBody.eventConditions - text: Change parameter mutations {parameterMutations} on create rule {eventCreateRulesId} for stream {dataStreamsId} in property {propertiesId}. slots: parameterMutations: requestBody.parameterMutations eventCreateRulesId: path.eventCreateRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventEditRules'].get update: x-apievangelist-phrasing: intent: List event edit rules on a stream effect: read questions: - What rules modify incoming events on my web stream? - In what order are event edit rules applied on a stream? instructions: - text: List event edit rules on stream {dataStreamsId} of property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Show the rules that rewrite events for stream {dataStreamsId} in property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventEditRules'].post update: x-apievangelist-phrasing: intent: Create an event edit rule effect: write questions: - Can I rename or change parameters of events as they arrive in GA4? - Can I set where a new edit rule sits in the processing order? instructions: - text: Create edit rule {displayName} on stream {dataStreamsId} of property {propertiesId} matching {eventConditions}. slots: displayName: requestBody.displayName dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId eventConditions: requestBody.eventConditions - text: Add an event edit rule applying {parameterMutations} on stream {dataStreamsId} in property {propertiesId}. slots: parameterMutations: requestBody.parameterMutations dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventEditRules/{eventEditRulesId}'].get update: x-apievangelist-phrasing: intent: Get one event edit rule effect: read questions: - Which parameter changes does a specific edit rule make? - What processing order does a particular event edit rule have? instructions: - text: Show event edit rule {eventEditRulesId} on stream {dataStreamsId} of property {propertiesId}. slots: eventEditRulesId: path.eventEditRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Read mutations of edit rule {eventEditRulesId} for stream {dataStreamsId} in property {propertiesId}. slots: eventEditRulesId: path.eventEditRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventEditRules/{eventEditRulesId}'].delete update: x-apievangelist-phrasing: intent: Delete an event edit rule effect: destructive questions: - Can I stop GA4 from rewriting an event by deleting the edit rule? - Does removing an edit rule change the order of the others? instructions: - text: Delete event edit rule {eventEditRulesId} on stream {dataStreamsId} of property {propertiesId}. slots: eventEditRulesId: path.eventEditRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Remove edit rule {eventEditRulesId} from stream {dataStreamsId} in property {propertiesId}. slots: eventEditRulesId: path.eventEditRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventEditRules/{eventEditRulesId}'].patch update: x-apievangelist-phrasing: intent: Update an event edit rule effect: write questions: - Can I rename an event edit rule or change what it matches? - Can I edit the parameter mutations on an existing edit rule? instructions: - text: Rename edit rule {eventEditRulesId} on stream {dataStreamsId} of property {propertiesId} to {displayName}. slots: eventEditRulesId: path.eventEditRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId displayName: requestBody.displayName - text: Set new conditions {eventConditions} on edit rule {eventEditRulesId} for stream {dataStreamsId} in property {propertiesId}. slots: eventConditions: requestBody.eventConditions eventEditRulesId: path.eventEditRulesId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/eventEditRules:reorder'].post update: x-apievangelist-phrasing: intent: Reorder event edit rules effect: write questions: - Can I change which event edit rule runs first on a stream? - How is the processing sequence of edit rules rearranged? instructions: - text: Reorder edit rules on stream {dataStreamsId} of property {propertiesId} to {eventEditRules}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId eventEditRules: requestBody.eventEditRules - text: Apply the processing sequence {eventEditRules} to stream {dataStreamsId} in property {propertiesId}. slots: eventEditRules: requestBody.eventEditRules dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets'].get update: x-apievangelist-phrasing: intent: List Measurement Protocol secrets (v1alpha) effect: read questions: - With v1alpha, which Measurement Protocol secrets are on a given stream? - Can the alpha API page Measurement Protocol secrets? instructions: - text: Via v1alpha, list Measurement Protocol secrets on stream {dataStreamsId} of property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Alpha API: show API secrets for stream {dataStreamsId} in property {propertiesId}, {pageSize} per page.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets'].post update: x-apievangelist-phrasing: intent: Create a Measurement Protocol secret (v1alpha) effect: write questions: - Using v1alpha, can I mint a Measurement Protocol secret for an app stream? - Does the alpha secret create call return the secret value? instructions: - text: Via v1alpha, create secret {displayName} on stream {dataStreamsId} of property {propertiesId}. slots: displayName: requestBody.displayName dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Alpha API: generate a Measurement Protocol secret for stream {dataStreamsId} in property {propertiesId}.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets/{measurementProtocolSecretsId}'].get update: x-apievangelist-phrasing: intent: Get a Measurement Protocol secret (v1alpha) effect: read questions: - Through v1alpha, can I read back one Measurement Protocol secret by ID? - What does the alpha API return for a single secret? instructions: - text: Via v1alpha, fetch secret {measurementProtocolSecretsId} on stream {dataStreamsId} of property {propertiesId}. slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Alpha API: show the value of secret {measurementProtocolSecretsId} for stream {dataStreamsId} in property {propertiesId}.' slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets/{measurementProtocolSecretsId}'].delete update: x-apievangelist-phrasing: intent: Delete a Measurement Protocol secret (v1alpha) effect: destructive questions: - Can v1alpha revoke a leaked Measurement Protocol secret? - After an alpha delete, will server-side hits using that secret fail? instructions: - text: Via v1alpha, delete secret {measurementProtocolSecretsId} on stream {dataStreamsId} of property {propertiesId}. slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Alpha API: revoke Measurement Protocol secret {measurementProtocolSecretsId} from stream {dataStreamsId} in property {propertiesId}.' slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets/{measurementProtocolSecretsId}'].patch update: x-apievangelist-phrasing: intent: Rename a Measurement Protocol secret (v1alpha) effect: write questions: - With the alpha API, can I rename a Measurement Protocol secret? - Which fields of a secret does the v1alpha update allow? instructions: - text: Via v1alpha, rename secret {measurementProtocolSecretsId} on stream {dataStreamsId} of property {propertiesId} to {displayName}. slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId displayName: requestBody.displayName - text: 'Alpha API: update secret {measurementProtocolSecretsId} for stream {dataStreamsId} in property {propertiesId} using mask {updateMask}.' slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId updateMask: query.updateMask method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/sKAdNetworkConversionValueSchema'].get update: x-apievangelist-phrasing: intent: List SKAdNetwork conversion value schemas effect: read questions: - Does my iOS app stream have an SKAdNetwork conversion value schema? - Can a stream have more than one SKAdNetwork schema? instructions: - text: List SKAdNetwork schemas on stream {dataStreamsId} of property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Show the iOS conversion value schema for stream {dataStreamsId} in property {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/sKAdNetworkConversionValueSchema'].post update: x-apievangelist-phrasing: intent: Create an SKAdNetwork conversion value schema effect: write questions: - Can I configure SKAdNetwork postback windows for my iOS app in GA4? - Should conversion values be applied automatically once a schema exists? instructions: - text: Create an SKAdNetwork schema on stream {dataStreamsId} of property {propertiesId} with first window {postbackWindowOne}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId postbackWindowOne: requestBody.postbackWindowOne - text: Set up iOS conversion values on stream {dataStreamsId} in property {propertiesId}, apply {applyConversionValues}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId applyConversionValues: requestBody.applyConversionValues method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/sKAdNetworkConversionValueSchema/{sKAdNetworkConversionValueSchemaId}'].get update: x-apievangelist-phrasing: intent: Get an SKAdNetwork conversion value schema effect: read questions: - What postback windows are configured in my SKAdNetwork schema? - Can I read one SKAdNetwork schema by its ID? instructions: - text: Show SKAdNetwork schema {sKAdNetworkConversionValueSchemaId} on stream {dataStreamsId} of property {propertiesId}. slots: sKAdNetworkConversionValueSchemaId: path.sKAdNetworkConversionValueSchemaId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Read postback windows of schema {sKAdNetworkConversionValueSchemaId} for stream {dataStreamsId} in property {propertiesId}. slots: sKAdNetworkConversionValueSchemaId: path.sKAdNetworkConversionValueSchemaId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/sKAdNetworkConversionValueSchema/{sKAdNetworkConversionValueSchemaId}'].delete update: x-apievangelist-phrasing: intent: Delete an SKAdNetwork conversion value schema effect: destructive questions: - Can I remove the SKAdNetwork conversion value schema from my iOS stream? - What happens to conversion value mapping after the schema is deleted? instructions: - text: Delete SKAdNetwork schema {sKAdNetworkConversionValueSchemaId} on stream {dataStreamsId} of property {propertiesId}. slots: sKAdNetworkConversionValueSchemaId: path.sKAdNetworkConversionValueSchemaId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Remove iOS conversion schema {sKAdNetworkConversionValueSchemaId} from stream {dataStreamsId} in property {propertiesId}. slots: sKAdNetworkConversionValueSchemaId: path.sKAdNetworkConversionValueSchemaId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/dataStreams/{dataStreamsId}/sKAdNetworkConversionValueSchema/{sKAdNetworkConversionValueSchemaId}'].patch update: x-apievangelist-phrasing: intent: Update an SKAdNetwork conversion value schema effect: write questions: - Can I change the second or third SKAdNetwork postback window later? - Can I toggle whether conversion values are applied on an existing schema? instructions: - text: Update postback window two {postbackWindowTwo} on schema {sKAdNetworkConversionValueSchemaId} for stream {dataStreamsId} of property {propertiesId}. slots: postbackWindowTwo: requestBody.postbackWindowTwo sKAdNetworkConversionValueSchemaId: path.sKAdNetworkConversionValueSchemaId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: Set window three {postbackWindowThree} on iOS schema {sKAdNetworkConversionValueSchemaId}, stream {dataStreamsId}, property {propertiesId}. slots: postbackWindowThree: requestBody.postbackWindowThree sKAdNetworkConversionValueSchemaId: path.sKAdNetworkConversionValueSchemaId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinkProposals/{displayVideo360AdvertiserLinkProposalsId}:approve'].post update: x-apievangelist-phrasing: intent: Approve a Display & Video 360 link proposal effect: write questions: - Can I accept a pending Display & Video 360 link request from the API? - What happens to a DV360 proposal once it is approved? instructions: - text: Approve DV360 link proposal {displayVideo360AdvertiserLinkProposalsId} on property {propertiesId}. slots: displayVideo360AdvertiserLinkProposalsId: path.displayVideo360AdvertiserLinkProposalsId propertiesId: path.propertiesId - text: Accept the Display & Video 360 proposal {displayVideo360AdvertiserLinkProposalsId} for property {propertiesId}. slots: displayVideo360AdvertiserLinkProposalsId: path.displayVideo360AdvertiserLinkProposalsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinkProposals/{displayVideo360AdvertiserLinkProposalsId}:cancel'].post update: x-apievangelist-phrasing: intent: Decline or withdraw a DV360 link proposal effect: destructive questions: - Can I decline a Display & Video 360 link proposal someone sent my property? - How do I withdraw a DV360 link proposal I started from Analytics? instructions: - text: Cancel DV360 proposal {displayVideo360AdvertiserLinkProposalsId} on property {propertiesId}. slots: displayVideo360AdvertiserLinkProposalsId: path.displayVideo360AdvertiserLinkProposalsId propertiesId: path.propertiesId - text: Decline the Display & Video 360 link request {displayVideo360AdvertiserLinkProposalsId} for property {propertiesId}. slots: displayVideo360AdvertiserLinkProposalsId: path.displayVideo360AdvertiserLinkProposalsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinkProposals'].get update: x-apievangelist-phrasing: intent: List DV360 link proposals effect: read questions: - Are there pending Display & Video 360 link proposals on my property? - Can I page through DV360 advertiser link proposals? instructions: - text: List DV360 link proposals on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show pending Display & Video 360 proposals for property {propertiesId}, page {pageToken}. slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinkProposals'].post update: x-apievangelist-phrasing: intent: Propose a DV360 advertiser link effect: write questions: - Can I send a link proposal to a Display & Video 360 advertiser from GA4? - Can cost and campaign data sharing be set on a DV360 proposal? instructions: - text: Propose a DV360 link to advertiser {advertiserId} from property {propertiesId}. slots: advertiserId: requestBody.advertiserId propertiesId: path.propertiesId - text: Create a Display & Video 360 proposal for {advertiserId} on property {propertiesId} with cost sharing {costDataSharingEnabled}. slots: advertiserId: requestBody.advertiserId propertiesId: path.propertiesId costDataSharingEnabled: requestBody.costDataSharingEnabled method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinkProposals/{displayVideo360AdvertiserLinkProposalsId}'].get update: x-apievangelist-phrasing: intent: Get a DV360 link proposal effect: read questions: - What is the status of a particular Display & Video 360 link proposal? - Who initiated a given DV360 proposal and for which advertiser? instructions: - text: Show DV360 proposal {displayVideo360AdvertiserLinkProposalsId} on property {propertiesId}. slots: displayVideo360AdvertiserLinkProposalsId: path.displayVideo360AdvertiserLinkProposalsId propertiesId: path.propertiesId - text: Check the status details of Display & Video 360 proposal {displayVideo360AdvertiserLinkProposalsId} for property {propertiesId}. slots: displayVideo360AdvertiserLinkProposalsId: path.displayVideo360AdvertiserLinkProposalsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinkProposals/{displayVideo360AdvertiserLinkProposalsId}'].delete update: x-apievangelist-phrasing: intent: Delete a cancelled DV360 link proposal effect: destructive questions: - Can I clean up a DV360 proposal that was already cancelled? - Why can only cancelled Display & Video 360 proposals be deleted? instructions: - text: Delete cancelled DV360 proposal {displayVideo360AdvertiserLinkProposalsId} from property {propertiesId}. slots: displayVideo360AdvertiserLinkProposalsId: path.displayVideo360AdvertiserLinkProposalsId propertiesId: path.propertiesId - text: Remove the withdrawn Display & Video 360 proposal {displayVideo360AdvertiserLinkProposalsId} on property {propertiesId}. slots: displayVideo360AdvertiserLinkProposalsId: path.displayVideo360AdvertiserLinkProposalsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinks'].get update: x-apievangelist-phrasing: intent: List DV360 advertiser links effect: read questions: - Which Display & Video 360 advertisers are linked to my property? - Can I list all active DV360 links on a property? instructions: - text: List DV360 advertiser links on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show active Display & Video 360 links for property {propertiesId}, {pageSize} per page. slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinks'].post update: x-apievangelist-phrasing: intent: Link a DV360 advertiser directly effect: write questions: - Can I link a Display & Video 360 advertiser without a proposal if I have access to both? - What permissions are required to create a DV360 link directly? instructions: - text: Link DV360 advertiser {advertiserId} to property {propertiesId}. slots: advertiserId: requestBody.advertiserId propertiesId: path.propertiesId - text: Create a direct Display & Video 360 link for {advertiserId} on property {propertiesId} with campaign sharing {campaignDataSharingEnabled}. slots: advertiserId: requestBody.advertiserId propertiesId: path.propertiesId campaignDataSharingEnabled: requestBody.campaignDataSharingEnabled method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinks/{displayVideo360AdvertiserLinksId}'].get update: x-apievangelist-phrasing: intent: Get one DV360 advertiser link effect: read questions: - What sharing settings does a specific Display & Video 360 link have? - Can I fetch one DV360 advertiser link by ID? instructions: - text: Show DV360 advertiser link {displayVideo360AdvertiserLinksId} on property {propertiesId}. slots: displayVideo360AdvertiserLinksId: path.displayVideo360AdvertiserLinksId propertiesId: path.propertiesId - text: Read settings of Display & Video 360 link {displayVideo360AdvertiserLinksId} for property {propertiesId}. slots: displayVideo360AdvertiserLinksId: path.displayVideo360AdvertiserLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinks/{displayVideo360AdvertiserLinksId}'].delete update: x-apievangelist-phrasing: intent: Unlink a DV360 advertiser effect: destructive questions: - How do I disconnect a Display & Video 360 advertiser from GA4? - Is an active DV360 link removable through the API? instructions: - text: Delete DV360 advertiser link {displayVideo360AdvertiserLinksId} from property {propertiesId}. slots: displayVideo360AdvertiserLinksId: path.displayVideo360AdvertiserLinksId propertiesId: path.propertiesId - text: Unlink Display & Video 360 connection {displayVideo360AdvertiserLinksId} on property {propertiesId}. slots: displayVideo360AdvertiserLinksId: path.displayVideo360AdvertiserLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/displayVideo360AdvertiserLinks/{displayVideo360AdvertiserLinksId}'].patch update: x-apievangelist-phrasing: intent: Update a DV360 advertiser link effect: write questions: - Can I turn off cost data sharing on an existing Display & Video 360 link? - Which DV360 link settings are editable after linking? instructions: - text: Set cost data sharing {costDataSharingEnabled} on DV360 link {displayVideo360AdvertiserLinksId} for property {propertiesId}. slots: costDataSharingEnabled: requestBody.costDataSharingEnabled displayVideo360AdvertiserLinksId: path.displayVideo360AdvertiserLinksId propertiesId: path.propertiesId - text: Update ads personalization {adsPersonalizationEnabled} on Display & Video 360 link {displayVideo360AdvertiserLinksId} in property {propertiesId}. slots: adsPersonalizationEnabled: requestBody.adsPersonalizationEnabled displayVideo360AdvertiserLinksId: path.displayVideo360AdvertiserLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/expandedDataSets'].get update: x-apievangelist-phrasing: intent: List expanded data sets effect: read questions: - What expanded data sets exist on my GA4 360 property? - Can I page through a property's expanded data sets? instructions: - text: List expanded data sets on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show expanded data sets for property {propertiesId}, page {pageToken}. slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/expandedDataSets'].post update: x-apievangelist-phrasing: intent: Create an expanded data set effect: write questions: - Can I create an expanded data set with a chosen set of dimensions and metrics? - Can an expanded data set filter which dimension values it keeps? instructions: - text: Create expanded data set {displayName} on property {propertiesId} with dimensions {dimensionNames} and metrics {metricNames}. slots: displayName: requestBody.displayName propertiesId: path.propertiesId dimensionNames: requestBody.dimensionNames metricNames: requestBody.metricNames - text: Add an expanded data set {displayName} filtered by {dimensionFilterExpression} to property {propertiesId}. slots: displayName: requestBody.displayName dimensionFilterExpression: requestBody.dimensionFilterExpression propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/expandedDataSets/{expandedDataSetsId}'].get update: x-apievangelist-phrasing: intent: Get one expanded data set effect: read questions: - Which dimensions and metrics make up a particular expanded data set? - When did an expanded data set start collecting data? instructions: - text: Show expanded data set {expandedDataSetsId} on property {propertiesId}. slots: expandedDataSetsId: path.expandedDataSetsId propertiesId: path.propertiesId - text: Read the fields of expanded data set {expandedDataSetsId} in property {propertiesId}. slots: expandedDataSetsId: path.expandedDataSetsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/expandedDataSets/{expandedDataSetsId}'].delete update: x-apievangelist-phrasing: intent: Delete an expanded data set effect: destructive questions: - Can I delete an expanded data set I no longer report on? - Is removing an expanded data set possible through the API? instructions: - text: Delete expanded data set {expandedDataSetsId} from property {propertiesId}. slots: expandedDataSetsId: path.expandedDataSetsId propertiesId: path.propertiesId - text: Remove the expanded data set {expandedDataSetsId} on property {propertiesId}. slots: expandedDataSetsId: path.expandedDataSetsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/expandedDataSets/{expandedDataSetsId}'].patch update: x-apievangelist-phrasing: intent: Update an expanded data set effect: write questions: - Can I rename an expanded data set or change its description? - Which fields of an expanded data set are editable after it is created? instructions: - text: Rename expanded data set {expandedDataSetsId} on property {propertiesId} to {displayName}. slots: expandedDataSetsId: path.expandedDataSetsId propertiesId: path.propertiesId displayName: requestBody.displayName - text: Update description of expanded data set {expandedDataSetsId} in property {propertiesId} to {description}. slots: expandedDataSetsId: path.expandedDataSetsId propertiesId: path.propertiesId description: requestBody.description method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/firebaseLinks'].get update: x-apievangelist-phrasing: intent: List Firebase links (v1alpha) effect: read questions: - Using the alpha admin API, is a Firebase project linked to this property? - Does v1alpha return at most one Firebase link per property? instructions: - text: Via v1alpha, list Firebase links for property {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Alpha API: show the Firebase project attached to property {propertiesId}.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/firebaseLinks'].post update: x-apievangelist-phrasing: intent: Link a Firebase project (v1alpha) effect: write questions: - Can the v1alpha API connect a Firebase project to a property? - Will the alpha Firebase link fail if one already exists? instructions: - text: Via v1alpha, link Firebase project {project} to property {propertiesId}. slots: project: requestBody.project propertiesId: path.propertiesId - text: 'Alpha API: attach Firebase {project} as the link for property {propertiesId}.' slots: project: requestBody.project propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/firebaseLinks/{firebaseLinksId}'].delete update: x-apievangelist-phrasing: intent: Unlink a Firebase project (v1alpha) effect: destructive questions: - With v1alpha, can I remove the Firebase link from a property? - Does the alpha Firebase unlink need the link ID? instructions: - text: Via v1alpha, delete Firebase link {firebaseLinksId} from property {propertiesId}. slots: firebaseLinksId: path.firebaseLinksId propertiesId: path.propertiesId - text: 'Alpha API: unlink Firebase connection {firebaseLinksId} on property {propertiesId}.' slots: firebaseLinksId: path.firebaseLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/googleAdsLinks'].get update: x-apievangelist-phrasing: intent: List Google Ads links (v1alpha) effect: read questions: - Via the alpha admin API, which Google Ads customers link to a property? - Can v1alpha page Google Ads links for large properties? instructions: - text: Via v1alpha, list Google Ads links for property {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Alpha API: show Google Ads connections on property {propertiesId}, {pageSize} per page.' slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/googleAdsLinks'].post update: x-apievangelist-phrasing: intent: Link a Google Ads account (v1alpha) effect: write questions: - Can the alpha API link a Google Ads customer ID to a property? - With v1alpha, can the new Google Ads link manage client accounts? instructions: - text: Via v1alpha, link Google Ads customer {customerId} to property {propertiesId}. slots: customerId: requestBody.customerId propertiesId: path.propertiesId - text: 'Alpha API: create a Google Ads link for {customerId} on property {propertiesId}, personalization {adsPersonalizationEnabled}.' slots: customerId: requestBody.customerId propertiesId: path.propertiesId adsPersonalizationEnabled: requestBody.adsPersonalizationEnabled method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/googleAdsLinks/{googleAdsLinksId}'].delete update: x-apievangelist-phrasing: intent: Unlink Google Ads (v1alpha) effect: destructive questions: - Using v1alpha, can I disconnect a Google Ads account from a property? - Does the alpha unlink stop importing Google Ads data? instructions: - text: Via v1alpha, delete Google Ads link {googleAdsLinksId} from property {propertiesId}. slots: googleAdsLinksId: path.googleAdsLinksId propertiesId: path.propertiesId - text: 'Alpha API: unlink Google Ads connection {googleAdsLinksId} on property {propertiesId}.' slots: googleAdsLinksId: path.googleAdsLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/googleAdsLinks/{googleAdsLinksId}'].patch update: x-apievangelist-phrasing: intent: Update a Google Ads link (v1alpha) effect: write questions: - With the alpha API, can I toggle ads personalization on a Google Ads link? - What Google Ads link fields does v1alpha let me update? instructions: - text: Via v1alpha, set ads personalization {adsPersonalizationEnabled} on Google Ads link {googleAdsLinksId} for property {propertiesId}. slots: adsPersonalizationEnabled: requestBody.adsPersonalizationEnabled googleAdsLinksId: path.googleAdsLinksId propertiesId: path.propertiesId - text: 'Alpha API: patch Google Ads link {googleAdsLinksId} on property {propertiesId} with mask {updateMask}.' slots: googleAdsLinksId: path.googleAdsLinksId propertiesId: path.propertiesId updateMask: query.updateMask method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/keyEvents'].get update: x-apievangelist-phrasing: intent: List key events (v1alpha) effect: read questions: - Using v1alpha, which events are marked as key events on a property? - Does the alpha key event list return empty when none exist? instructions: - text: Via v1alpha, list key events for property {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Alpha API: show key events on property {propertiesId}, page {pageToken}.' slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/keyEvents'].post update: x-apievangelist-phrasing: intent: Create a key event (v1alpha) effect: write questions: - Can the v1alpha API mark an event such as sign_up as a key event? - With alpha, can a key event carry a default value? instructions: - text: Via v1alpha, make {eventName} a key event on property {propertiesId}. slots: eventName: requestBody.eventName propertiesId: path.propertiesId - text: 'Alpha API: create key event {eventName} counted {countingMethod} with default {defaultValue} on property {propertiesId}.' slots: eventName: requestBody.eventName countingMethod: requestBody.countingMethod defaultValue: requestBody.defaultValue propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/keyEvents/{keyEventsId}'].get update: x-apievangelist-phrasing: intent: Get a key event (v1alpha) effect: read questions: - Through v1alpha, how is a given key event counted? - Can the alpha API fetch one key event by ID? instructions: - text: Via v1alpha, fetch key event {keyEventsId} on property {propertiesId}. slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId - text: 'Alpha API: show counting method of key event {keyEventsId} in property {propertiesId}.' slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/keyEvents/{keyEventsId}'].delete update: x-apievangelist-phrasing: intent: Delete a key event (v1alpha) effect: destructive questions: - Using the alpha API, can I stop treating an event as a key event? - Can v1alpha delete a key event that is marked non-deletable? instructions: - text: Via v1alpha, delete key event {keyEventsId} from property {propertiesId}. slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId - text: 'Alpha API: unmark key event {keyEventsId} on property {propertiesId}.' slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/keyEvents/{keyEventsId}'].patch update: x-apievangelist-phrasing: intent: Update a key event (v1alpha) effect: write questions: - With v1alpha, can I change a key event from once per event to once per session? - Can the alpha API update a key event's default value? instructions: - text: Via v1alpha, set counting method {countingMethod} on key event {keyEventsId} in property {propertiesId}. slots: countingMethod: requestBody.countingMethod keyEventsId: path.keyEventsId propertiesId: path.propertiesId - text: 'Alpha API: change default value of key event {keyEventsId} on property {propertiesId} to {defaultValue}.' slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId defaultValue: requestBody.defaultValue method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportingDataAnnotations'].get update: x-apievangelist-phrasing: intent: List reporting annotations effect: read questions: - What annotations have been added to my GA4 reports, like campaign launches? - Can I filter reporting data annotations when listing them? instructions: - text: List reporting annotations on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show annotations for property {propertiesId} matching {filter}. slots: propertiesId: path.propertiesId filter: query.filter method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportingDataAnnotations'].post update: x-apievangelist-phrasing: intent: Add a reporting annotation effect: write questions: - Can I annotate a date in GA4 reports to explain a traffic spike? - Can an annotation cover a date range instead of a single day? instructions: - text: Add annotation {title} on {annotationDate} to property {propertiesId}. slots: title: requestBody.title annotationDate: requestBody.annotationDate propertiesId: path.propertiesId - text: Create a {color} annotation {title} spanning {annotationDateRange} on property {propertiesId}. slots: color: requestBody.color title: requestBody.title annotationDateRange: requestBody.annotationDateRange propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportingDataAnnotations/{reportingDataAnnotationsId}'].get update: x-apievangelist-phrasing: intent: Get one reporting annotation effect: read questions: - What does a specific report annotation say and which dates does it cover? - Was a given annotation system-generated or added by a person? instructions: - text: Show annotation {reportingDataAnnotationsId} on property {propertiesId}. slots: reportingDataAnnotationsId: path.reportingDataAnnotationsId propertiesId: path.propertiesId - text: Read the note and date of annotation {reportingDataAnnotationsId} in property {propertiesId}. slots: reportingDataAnnotationsId: path.reportingDataAnnotationsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportingDataAnnotations/{reportingDataAnnotationsId}'].delete update: x-apievangelist-phrasing: intent: Delete a reporting annotation effect: destructive questions: - Can I remove an outdated annotation from my GA4 reports? - Is deleting a report annotation permanent? instructions: - text: Delete annotation {reportingDataAnnotationsId} from property {propertiesId}. slots: reportingDataAnnotationsId: path.reportingDataAnnotationsId propertiesId: path.propertiesId - text: Remove the report note {reportingDataAnnotationsId} on property {propertiesId}. slots: reportingDataAnnotationsId: path.reportingDataAnnotationsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportingDataAnnotations/{reportingDataAnnotationsId}'].patch update: x-apievangelist-phrasing: intent: Update a reporting annotation effect: write questions: - Can I fix the title or date on an existing report annotation? - Can I recolor an annotation after creating it? instructions: - text: Change the title of annotation {reportingDataAnnotationsId} on property {propertiesId} to {title}. slots: reportingDataAnnotationsId: path.reportingDataAnnotationsId propertiesId: path.propertiesId title: requestBody.title - text: Move annotation {reportingDataAnnotationsId} in property {propertiesId} to date {annotationDate}. slots: reportingDataAnnotationsId: path.reportingDataAnnotationsId propertiesId: path.propertiesId annotationDate: requestBody.annotationDate method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/rollupPropertySourceLinks'].get update: x-apievangelist-phrasing: intent: List a roll-up property's source links effect: read questions: - Which properties feed data into my roll-up property? - Why does listing source links fail on a normal property? instructions: - text: List source links on roll-up property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show the source properties aggregated by roll-up {propertiesId}, {pageSize} per page. slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/rollupPropertySourceLinks'].post update: x-apievangelist-phrasing: intent: Add a source to a roll-up property effect: write questions: - Can I add another property as a source to an existing roll-up? - Does adding a source link work on properties that aren't roll-ups? instructions: - text: Add source property {sourceProperty} to roll-up property {propertiesId}. slots: sourceProperty: requestBody.sourceProperty propertiesId: path.propertiesId - text: Link {sourceProperty} as a data source for roll-up {propertiesId}. slots: sourceProperty: requestBody.sourceProperty propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/rollupPropertySourceLinks/{rollupPropertySourceLinksId}'].get update: x-apievangelist-phrasing: intent: Get one roll-up source link effect: read questions: - Which source property does a particular roll-up link point to? - Can I look up a single roll-up source link by ID? instructions: - text: Show roll-up source link {rollupPropertySourceLinksId} on property {propertiesId}. slots: rollupPropertySourceLinksId: path.rollupPropertySourceLinksId propertiesId: path.propertiesId - text: Tell me which property source link {rollupPropertySourceLinksId} feeds into roll-up {propertiesId}. slots: rollupPropertySourceLinksId: path.rollupPropertySourceLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/rollupPropertySourceLinks/{rollupPropertySourceLinksId}'].delete update: x-apievangelist-phrasing: intent: Remove a source from a roll-up property effect: destructive questions: - Can I stop a property from feeding my roll-up property? - Is removing a roll-up source link allowed on non-roll-up properties? instructions: - text: Delete roll-up source link {rollupPropertySourceLinksId} from property {propertiesId}. slots: rollupPropertySourceLinksId: path.rollupPropertySourceLinksId propertiesId: path.propertiesId - text: Detach source {rollupPropertySourceLinksId} from roll-up {propertiesId}. slots: rollupPropertySourceLinksId: path.rollupPropertySourceLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/searchAds360Links'].get update: x-apievangelist-phrasing: intent: List Search Ads 360 links effect: read questions: - Which Search Ads 360 advertisers are linked to my property? - Can I page through all Search Ads 360 links? instructions: - text: List Search Ads 360 links on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show SA360 connections for property {propertiesId}, page {pageToken}. slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/searchAds360Links'].post update: x-apievangelist-phrasing: intent: Link a Search Ads 360 advertiser effect: write questions: - Can I link a Search Ads 360 advertiser to GA4 through the API? - Can site stats sharing be enabled when creating an SA360 link? instructions: - text: Link Search Ads 360 advertiser {advertiserId} to property {propertiesId}. slots: advertiserId: requestBody.advertiserId propertiesId: path.propertiesId - text: Create an SA360 link for {advertiserId} on property {propertiesId} with site stats sharing {siteStatsSharingEnabled}. slots: advertiserId: requestBody.advertiserId propertiesId: path.propertiesId siteStatsSharingEnabled: requestBody.siteStatsSharingEnabled method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/searchAds360Links/{searchAds360LinksId}'].get update: x-apievangelist-phrasing: intent: Get one Search Ads 360 link effect: read questions: - What data sharing does a specific Search Ads 360 link have? - Can I fetch one SA360 link by its ID? instructions: - text: Show Search Ads 360 link {searchAds360LinksId} on property {propertiesId}. slots: searchAds360LinksId: path.searchAds360LinksId propertiesId: path.propertiesId - text: Read sharing settings of SA360 link {searchAds360LinksId} in property {propertiesId}. slots: searchAds360LinksId: path.searchAds360LinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/searchAds360Links/{searchAds360LinksId}'].delete update: x-apievangelist-phrasing: intent: Unlink a Search Ads 360 advertiser effect: destructive questions: - How can I disconnect Search Ads 360 from my GA4 property? - Does removing an SA360 link stop campaign data flowing in? instructions: - text: Delete Search Ads 360 link {searchAds360LinksId} from property {propertiesId}. slots: searchAds360LinksId: path.searchAds360LinksId propertiesId: path.propertiesId - text: Unlink SA360 connection {searchAds360LinksId} on property {propertiesId}. slots: searchAds360LinksId: path.searchAds360LinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/searchAds360Links/{searchAds360LinksId}'].patch update: x-apievangelist-phrasing: intent: Update a Search Ads 360 link effect: write questions: - Can I turn cost data sharing off on an existing Search Ads 360 link? - Which SA360 link settings can be edited later? instructions: - text: Set cost data sharing {costDataSharingEnabled} on SA360 link {searchAds360LinksId} for property {propertiesId}. slots: costDataSharingEnabled: requestBody.costDataSharingEnabled searchAds360LinksId: path.searchAds360LinksId propertiesId: path.propertiesId - text: Update campaign sharing {campaignDataSharingEnabled} on Search Ads 360 link {searchAds360LinksId} in property {propertiesId}. slots: campaignDataSharingEnabled: requestBody.campaignDataSharingEnabled searchAds360LinksId: path.searchAds360LinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/subpropertyEventFilters'].get update: x-apievangelist-phrasing: intent: List subproperty event filters effect: read questions: - What event filters decide which data flows into my subproperties? - Can I page through subproperty event filters on a property? instructions: - text: List subproperty event filters on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show filters routing events to subproperties of {propertiesId}, {pageSize} per page. slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/subpropertyEventFilters'].post update: x-apievangelist-phrasing: intent: Create a subproperty event filter effect: write questions: - Can I add a filter so a subproperty only gets certain events? - Which property does a new subproperty event filter apply to? instructions: - text: Create a subproperty event filter on property {propertiesId} with clauses {filterClauses}. slots: propertiesId: path.propertiesId filterClauses: requestBody.filterClauses - text: Add an event filter for subproperty {applyToProperty} under property {propertiesId}. slots: applyToProperty: requestBody.applyToProperty propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/subpropertyEventFilters/{subpropertyEventFiltersId}'].get update: x-apievangelist-phrasing: intent: Get one subproperty event filter effect: read questions: - What clauses does a particular subproperty event filter use? - Can I read a single subproperty filter by its ID? instructions: - text: Show subproperty event filter {subpropertyEventFiltersId} on property {propertiesId}. slots: subpropertyEventFiltersId: path.subpropertyEventFiltersId propertiesId: path.propertiesId - text: Read clauses of subproperty filter {subpropertyEventFiltersId} in property {propertiesId}. slots: subpropertyEventFiltersId: path.subpropertyEventFiltersId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/subpropertyEventFilters/{subpropertyEventFiltersId}'].delete update: x-apievangelist-phrasing: intent: Delete a subproperty event filter effect: destructive questions: - Can I remove the event filter feeding a subproperty? - Is a deleted subproperty event filter recoverable? instructions: - text: Delete subproperty event filter {subpropertyEventFiltersId} from property {propertiesId}. slots: subpropertyEventFiltersId: path.subpropertyEventFiltersId propertiesId: path.propertiesId - text: Remove subproperty filter {subpropertyEventFiltersId} on property {propertiesId}. slots: subpropertyEventFiltersId: path.subpropertyEventFiltersId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/subpropertyEventFilters/{subpropertyEventFiltersId}'].patch update: x-apievangelist-phrasing: intent: Update a subproperty event filter effect: write questions: - Can I change the conditions of an existing subproperty event filter? - Is the target subproperty of a filter editable? instructions: - text: Update clauses of subproperty filter {subpropertyEventFiltersId} on property {propertiesId} to {filterClauses}. slots: subpropertyEventFiltersId: path.subpropertyEventFiltersId propertiesId: path.propertiesId filterClauses: requestBody.filterClauses - text: Patch subproperty filter {subpropertyEventFiltersId} in property {propertiesId} with mask {updateMask}. slots: subpropertyEventFiltersId: path.subpropertyEventFiltersId propertiesId: path.propertiesId updateMask: query.updateMask method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/subpropertySyncConfigs/{subpropertySyncConfigsId}'].get update: x-apievangelist-phrasing: intent: Get a subproperty sync config effect: read questions: - How are custom dimensions and metrics synced to a particular subproperty? - Can I read one subproperty sync config by ID? instructions: - text: Show subproperty sync config {subpropertySyncConfigsId} on property {propertiesId}. slots: subpropertySyncConfigsId: path.subpropertySyncConfigsId propertiesId: path.propertiesId - text: Check the sync mode in config {subpropertySyncConfigsId} for property {propertiesId}. slots: subpropertySyncConfigsId: path.subpropertySyncConfigsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/subpropertySyncConfigs/{subpropertySyncConfigsId}'].patch update: x-apievangelist-phrasing: intent: Change a subproperty sync config effect: write questions: - Can I switch a subproperty to sync all custom dimensions and metrics automatically? - Which setting controls custom field syncing on a subproperty? instructions: - text: Set sync mode {customDimensionAndMetricSyncMode} on config {subpropertySyncConfigsId} for property {propertiesId}. slots: customDimensionAndMetricSyncMode: requestBody.customDimensionAndMetricSyncMode subpropertySyncConfigsId: path.subpropertySyncConfigsId propertiesId: path.propertiesId - text: Update subproperty sync config {subpropertySyncConfigsId} in property {propertiesId} using mask {updateMask}. slots: subpropertySyncConfigsId: path.subpropertySyncConfigsId propertiesId: path.propertiesId updateMask: query.updateMask method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/subpropertySyncConfigs'].get update: x-apievangelist-phrasing: intent: List subproperty sync configs effect: read questions: - Which subproperties have sync configs under my property? - Can I page through every subproperty sync configuration? instructions: - text: List subproperty sync configs on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show how each subproperty of {propertiesId} syncs custom fields, page {pageToken}. slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}:acknowledgeUserDataCollection'].post update: x-apievangelist-phrasing: intent: Accept data collection terms (v1beta) effect: write questions: - In the beta admin API, which call records that I accepted user data collection for a property ID? - Must the v1beta acknowledgement happen before server-side secrets can exist? instructions: - text: On v1beta, record the user data collection acknowledgement for property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: acknowledge {acknowledgement} for property ID {propertiesId}.' slots: acknowledgement: requestBody.acknowledgement propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}'].get update: x-apievangelist-phrasing: intent: Get one property (v1beta) effect: read questions: - With the beta admin API, what currency and industry does a property ID use? - Can v1beta look up a single property's display name and parent account? instructions: - text: On v1beta, get property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: show currency, time zone and account for property ID {propertiesId}.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}'].delete update: x-apievangelist-phrasing: intent: Trash a property (v1beta) effect: destructive questions: - When the beta admin API trashes a property, how do I get it back? - Is a v1beta property deletion immediate or soft? instructions: - text: On v1beta, trash property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: soft-delete the property with ID {propertiesId} so it lands in the Trash Can.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}'].patch update: x-apievangelist-phrasing: intent: Update a property (v1beta) effect: write questions: - Using the beta admin API, can I change a property's reporting currency? - Does v1beta let me update a property's industry category? instructions: - text: On v1beta, set currency {currencyCode} on property ID {propertiesId}. slots: currencyCode: requestBody.currencyCode propertiesId: path.propertiesId - text: 'Beta admin: change industry of property ID {propertiesId} to {industryCategory}.' slots: propertiesId: path.propertiesId industryCategory: requestBody.industryCategory method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataRetentionSettings'].get update: x-apievangelist-phrasing: intent: View data retention settings (v1beta) effect: read questions: - In the beta admin API, what user and event retention periods apply to a property? - Can v1beta tell me if user data resets on new activity? instructions: - text: On v1beta, get retention periods for property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: report whether property ID {propertiesId} resets user data on new activity.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataRetentionSettings'].patch update: x-apievangelist-phrasing: intent: Change data retention settings (v1beta) effect: write questions: - Using v1beta, can I shorten how long a property keeps user-level data? - Does the beta retention update control resetting on new activity? instructions: - text: On v1beta, change event retention of property ID {propertiesId} to {eventDataRetention}. slots: propertiesId: path.propertiesId eventDataRetention: requestBody.eventDataRetention - text: 'Beta admin: set reset on new activity to {resetUserDataOnNewActivity} for property ID {propertiesId}.' slots: resetUserDataOnNewActivity: requestBody.resetUserDataOnNewActivity propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}:runAccessReport'].post update: x-apievangelist-phrasing: intent: Audit reporting data access (v1beta) effect: read questions: - In the beta admin API, can I see which reports a property's users opened last month? - Does the v1beta access report return quota usage? instructions: - text: On v1beta, audit data access on property ID {propertiesId} for {dateRanges}. slots: propertiesId: path.propertiesId dateRanges: requestBody.dateRanges - text: 'Beta admin: access records for property ID {propertiesId} broken down by {dimensions}.' slots: propertiesId: path.propertiesId dimensions: requestBody.dimensions method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/conversionEvents'].get update: x-apievangelist-phrasing: intent: List conversion events (deprecated, v1beta) effect: read questions: - Is the beta conversion events list still usable after the move to key events? - Can the deprecated v1beta list page through conversions for a property ID? instructions: - text: On deprecated v1beta, list conversions for property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta legacy: conversions of property ID {propertiesId}, {pageSize} per page.' slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/conversionEvents'].post update: x-apievangelist-phrasing: intent: Create a conversion event (deprecated, v1beta) effect: write questions: - Can I still mark conversions through the deprecated v1beta endpoint? - What replaces the beta conversion create call? instructions: - text: On deprecated v1beta, add conversion {eventName} to property ID {propertiesId}. slots: eventName: requestBody.eventName propertiesId: path.propertiesId - text: 'Beta legacy: create conversion {eventName} counting {countingMethod} on property ID {propertiesId}.' slots: eventName: requestBody.eventName countingMethod: requestBody.countingMethod propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/conversionEvents/{conversionEventsId}'].get update: x-apievangelist-phrasing: intent: Get a conversion event (deprecated, v1beta) effect: read questions: - Via the deprecated beta endpoint, is a conversion event custom or built in? - Can v1beta fetch one legacy conversion by its ID? instructions: - text: On deprecated v1beta, get conversion {conversionEventsId} of property ID {propertiesId}. slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId - text: 'Beta legacy: show whether conversion {conversionEventsId} on property ID {propertiesId} is deletable.' slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/conversionEvents/{conversionEventsId}'].delete update: x-apievangelist-phrasing: intent: Delete a conversion event (deprecated, v1beta) effect: destructive questions: - Can the deprecated v1beta endpoint remove a conversion from a property? - Should I delete legacy beta conversions or key events going forward? instructions: - text: On deprecated v1beta, remove conversion {conversionEventsId} from property ID {propertiesId}. slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId - text: 'Beta legacy: drop conversion {conversionEventsId} for property ID {propertiesId}.' slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/conversionEvents/{conversionEventsId}'].patch update: x-apievangelist-phrasing: intent: Update a conversion event (deprecated, v1beta) effect: write questions: - Through deprecated v1beta, can I edit a conversion's default value? - Is updating conversions on the beta endpoint still allowed? instructions: - text: On deprecated v1beta, change counting of conversion {conversionEventsId} on property ID {propertiesId} to {countingMethod}. slots: conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId countingMethod: requestBody.countingMethod - text: 'Beta legacy: default value {defaultConversionValue} for conversion {conversionEventsId}, property ID {propertiesId}.' slots: defaultConversionValue: requestBody.defaultConversionValue conversionEventsId: path.conversionEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customDimensions/{customDimensionsId}:archive'].post update: x-apievangelist-phrasing: intent: Archive a custom dimension (v1beta) effect: destructive questions: - Using the beta admin API, can I archive a dimension by property ID and dimension ID? - Is archiving a v1beta custom dimension reversible? instructions: - text: On v1beta, archive dimension {customDimensionsId} of property ID {propertiesId}. slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId - text: 'Beta admin: stop dimension {customDimensionsId} showing in property ID {propertiesId}.' slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customDimensions'].get update: x-apievangelist-phrasing: intent: List custom dimensions (v1beta) effect: read questions: - In v1beta, how many custom dimensions does a property ID have? - Can the beta dimension list be paged? instructions: - text: On v1beta, get all custom dimensions of property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: dimensions for property ID {propertiesId}, next page {pageToken}.' slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customDimensions'].post update: x-apievangelist-phrasing: intent: Create a custom dimension (v1beta) effect: write questions: - With the beta admin API, can I register an item-scoped custom dimension? - Can a v1beta dimension be excluded from ads personalization at creation? instructions: - text: On v1beta, register parameter {parameterName} as dimension {displayName} on property ID {propertiesId}. slots: parameterName: requestBody.parameterName displayName: requestBody.displayName propertiesId: path.propertiesId - text: 'Beta admin: new {scope} dimension for {parameterName}, property ID {propertiesId}.' slots: scope: requestBody.scope parameterName: requestBody.parameterName propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customDimensions/{customDimensionsId}'].get update: x-apievangelist-phrasing: intent: Get a custom dimension (v1beta) effect: read questions: - In v1beta, what description and scope does one custom dimension have? - Can the beta admin API read a dimension by its ID? instructions: - text: On v1beta, get dimension {customDimensionsId} of property ID {propertiesId}. slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId - text: 'Beta admin: describe custom dimension {customDimensionsId} for property ID {propertiesId}.' slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customDimensions/{customDimensionsId}'].patch update: x-apievangelist-phrasing: intent: Update a custom dimension (v1beta) effect: write questions: - Using v1beta, can I update a custom dimension's description? - Which custom dimension fields are editable through the beta API? instructions: - text: On v1beta, set description {description} on dimension {customDimensionsId} of property ID {propertiesId}. slots: description: requestBody.description customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId - text: 'Beta admin: give dimension {customDimensionsId} of property ID {propertiesId} the name {displayName}.' slots: customDimensionsId: path.customDimensionsId propertiesId: path.propertiesId displayName: requestBody.displayName method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customMetrics/{customMetricsId}:archive'].post update: x-apievangelist-phrasing: intent: Archive a custom metric (v1beta) effect: destructive questions: - With the beta admin API, can I archive a metric by property ID and metric ID? - Does a v1beta archive remove the metric from explorations? instructions: - text: On v1beta, archive metric {customMetricsId} of property ID {propertiesId}. slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId - text: 'Beta admin: take custom metric {customMetricsId} out of use on property ID {propertiesId}.' slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customMetrics'].get update: x-apievangelist-phrasing: intent: List custom metrics (v1beta) effect: read questions: - In v1beta, which custom metrics are registered for a property ID? - Can I set a page size for the beta metrics list? instructions: - text: On v1beta, get all custom metrics of property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: metrics for property ID {propertiesId}, {pageSize} at a time.' slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customMetrics'].post update: x-apievangelist-phrasing: intent: Create a custom metric (v1beta) effect: write questions: - Using v1beta, can I create a currency-unit custom metric? - Can a beta-created metric be marked as restricted revenue data? instructions: - text: On v1beta, register parameter {parameterName} as metric {displayName} on property ID {propertiesId}. slots: parameterName: requestBody.parameterName displayName: requestBody.displayName propertiesId: path.propertiesId - text: 'Beta admin: new metric in {measurementUnit} for {parameterName}, property ID {propertiesId}.' slots: measurementUnit: requestBody.measurementUnit parameterName: requestBody.parameterName propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customMetrics/{customMetricsId}'].get update: x-apievangelist-phrasing: intent: Get a custom metric (v1beta) effect: read questions: - In the beta admin API, what scope and unit does one custom metric have? - Can v1beta fetch a metric by its ID? instructions: - text: On v1beta, get metric {customMetricsId} of property ID {propertiesId}. slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId - text: 'Beta admin: describe custom metric {customMetricsId} for property ID {propertiesId}.' slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/customMetrics/{customMetricsId}'].patch update: x-apievangelist-phrasing: intent: Update a custom metric (v1beta) effect: write questions: - Using v1beta, can I change a custom metric's restricted metric type? - Is a metric's description editable in the beta API? instructions: - text: On v1beta, set restricted type {restrictedMetricType} on metric {customMetricsId} of property ID {propertiesId}. slots: restrictedMetricType: requestBody.restrictedMetricType customMetricsId: path.customMetricsId propertiesId: path.propertiesId - text: 'Beta admin: give metric {customMetricsId} of property ID {propertiesId} the description {description}.' slots: customMetricsId: path.customMetricsId propertiesId: path.propertiesId description: requestBody.description method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams'].get update: x-apievangelist-phrasing: intent: List data streams (v1beta) effect: read questions: - In v1beta, which streams collect data for a property ID? - Can the beta stream list be paged with a token? instructions: - text: On v1beta, get all streams of property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: streams for property ID {propertiesId}, next page {pageToken}.' slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams'].post update: x-apievangelist-phrasing: intent: Create a data stream (v1beta) effect: write questions: - Using the beta admin API, can I add an Android app stream? - What web stream data does v1beta need for a new website stream? instructions: - text: On v1beta, add a {type} stream called {displayName} to property ID {propertiesId}. slots: type: requestBody.type displayName: requestBody.displayName propertiesId: path.propertiesId - text: 'Beta admin: new Android stream with {androidAppStreamData} for property ID {propertiesId}.' slots: androidAppStreamData: requestBody.androidAppStreamData propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams/{dataStreamsId}'].get update: x-apievangelist-phrasing: intent: Get a data stream (v1beta) effect: read questions: - In v1beta, what are the settings of one data stream? - Can the beta admin API fetch a stream by property ID and stream ID? instructions: - text: On v1beta, get stream {dataStreamsId} of property ID {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Beta admin: describe data stream {dataStreamsId} for property ID {propertiesId}.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams/{dataStreamsId}'].delete update: x-apievangelist-phrasing: intent: Delete a data stream (v1beta) effect: destructive questions: - Using v1beta, can I delete an app stream I no longer ship? - Is a v1beta stream deletion permanent? instructions: - text: On v1beta, delete stream {dataStreamsId} of property ID {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Beta admin: drop data stream {dataStreamsId} for property ID {propertiesId}.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams/{dataStreamsId}'].patch update: x-apievangelist-phrasing: intent: Update a data stream (v1beta) effect: write questions: - Using the beta API, can I change a stream's display name? - Can v1beta update the web stream data of an existing stream? instructions: - text: On v1beta, give stream {dataStreamsId} of property ID {propertiesId} the name {displayName}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId displayName: requestBody.displayName - text: 'Beta admin: patch stream {dataStreamsId}, property ID {propertiesId}, fields {updateMask}.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId updateMask: query.updateMask method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets'].get update: x-apievangelist-phrasing: intent: List Measurement Protocol secrets (v1beta) effect: read questions: - In v1beta, what API secrets does a stream have for server-side events? - Can the beta secrets list be paged? instructions: - text: On v1beta, get Measurement Protocol secrets of stream {dataStreamsId}, property ID {propertiesId}. slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Beta admin: API secrets for stream {dataStreamsId} in property ID {propertiesId}, next page {pageToken}.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets'].post update: x-apievangelist-phrasing: intent: Create a Measurement Protocol secret (v1beta) effect: write questions: - Using v1beta, can I issue a new Measurement Protocol secret for my web stream? - What must be acknowledged before a beta secret can be issued? instructions: - text: On v1beta, issue secret {displayName} for stream {dataStreamsId}, property ID {propertiesId}. slots: displayName: requestBody.displayName dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Beta admin: new Measurement Protocol API secret on stream {dataStreamsId} of property ID {propertiesId}.' slots: dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets/{measurementProtocolSecretsId}'].get update: x-apievangelist-phrasing: intent: Get a Measurement Protocol secret (v1beta) effect: read questions: - In v1beta, can I read one Measurement Protocol secret's value by its ID? - What fields describe a secret in the beta admin API? instructions: - text: On v1beta, read Measurement Protocol API secret {measurementProtocolSecretsId} under stream {dataStreamsId}, property ID {propertiesId}. slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Beta admin: describe API secret {measurementProtocolSecretsId} on stream {dataStreamsId} in property ID {propertiesId}.' slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets/{measurementProtocolSecretsId}'].delete update: x-apievangelist-phrasing: intent: Delete a Measurement Protocol secret (v1beta) effect: destructive questions: - Using v1beta, can I delete a Measurement Protocol secret that was exposed? - Is a beta secret deletion immediate? instructions: - text: On v1beta, revoke Measurement Protocol API secret {measurementProtocolSecretsId} under stream {dataStreamsId}, property ID {propertiesId}. slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId - text: 'Beta admin: drop API secret {measurementProtocolSecretsId} on stream {dataStreamsId} in property ID {propertiesId}.' slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/dataStreams/{dataStreamsId}/measurementProtocolSecrets/{measurementProtocolSecretsId}'].patch update: x-apievangelist-phrasing: intent: Update a Measurement Protocol secret (v1beta) effect: write questions: - In v1beta, can a Measurement Protocol secret be given a clearer name? - Does the beta secret update touch the secret value? instructions: - text: On v1beta, relabel Measurement Protocol API secret {measurementProtocolSecretsId} under stream {dataStreamsId}, property ID {propertiesId}, as {displayName}. slots: measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId displayName: requestBody.displayName - text: 'Beta admin: patch fields {updateMask} on API secret {measurementProtocolSecretsId}, stream {dataStreamsId}, property ID {propertiesId}.' slots: updateMask: query.updateMask measurementProtocolSecretsId: path.measurementProtocolSecretsId dataStreamsId: path.dataStreamsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/firebaseLinks'].get update: x-apievangelist-phrasing: intent: List Firebase links (v1beta) effect: read questions: - In v1beta, which Firebase project links to a property ID? - Is the beta Firebase link list ever longer than one? instructions: - text: On v1beta, get Firebase links of property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: which Firebase project is tied to property ID {propertiesId}.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/firebaseLinks'].post update: x-apievangelist-phrasing: intent: Link a Firebase project (v1beta) effect: write questions: - Using the beta admin API, can I tie a Firebase project to a property ID? - What does v1beta need to create a Firebase link? instructions: - text: On v1beta, tie Firebase project {project} to property ID {propertiesId}. slots: project: requestBody.project propertiesId: path.propertiesId - text: 'Beta admin: new Firebase link to {project} for property ID {propertiesId}.' slots: project: requestBody.project propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/firebaseLinks/{firebaseLinksId}'].delete update: x-apievangelist-phrasing: intent: Unlink a Firebase project (v1beta) effect: destructive questions: - In v1beta, can I break the link between a property and Firebase? - Which ID does the beta Firebase unlink require? instructions: - text: On v1beta, remove Firebase link {firebaseLinksId} of property ID {propertiesId}. slots: firebaseLinksId: path.firebaseLinksId propertiesId: path.propertiesId - text: 'Beta admin: drop Firebase connection {firebaseLinksId} for property ID {propertiesId}.' slots: firebaseLinksId: path.firebaseLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/googleAdsLinks'].get update: x-apievangelist-phrasing: intent: List Google Ads links (v1beta) effect: read questions: - In v1beta, which Google Ads accounts are tied to a property ID? - Can the beta Google Ads link list be paged? instructions: - text: On v1beta, get Google Ads links of property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: Google Ads connections for property ID {propertiesId}, next page {pageToken}.' slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/googleAdsLinks'].post update: x-apievangelist-phrasing: intent: Link a Google Ads account (v1beta) effect: write questions: - Using v1beta, can I tie a Google Ads customer to a property ID? - Does the beta Google Ads link record who created it? instructions: - text: On v1beta, tie Google Ads customer {customerId} to property ID {propertiesId}. slots: customerId: requestBody.customerId propertiesId: path.propertiesId - text: 'Beta admin: new Google Ads link for {customerId} on property ID {propertiesId}, manage clients {canManageClients}.' slots: customerId: requestBody.customerId propertiesId: path.propertiesId canManageClients: requestBody.canManageClients method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/googleAdsLinks/{googleAdsLinksId}'].delete update: x-apievangelist-phrasing: intent: Unlink Google Ads (v1beta) effect: destructive questions: - In v1beta, can I break the tie between Google Ads and a property ID? - Which link ID does the beta Google Ads unlink use? instructions: - text: On v1beta, remove Google Ads link {googleAdsLinksId} of property ID {propertiesId}. slots: googleAdsLinksId: path.googleAdsLinksId propertiesId: path.propertiesId - text: 'Beta admin: drop Google Ads connection {googleAdsLinksId} for property ID {propertiesId}.' slots: googleAdsLinksId: path.googleAdsLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/googleAdsLinks/{googleAdsLinksId}'].patch update: x-apievangelist-phrasing: intent: Update a Google Ads link (v1beta) effect: write questions: - Using v1beta, can I change personalization on a Google Ads link by ID? - Which fields can the beta Google Ads link update touch? instructions: - text: On v1beta, set personalization {adsPersonalizationEnabled} for Google Ads link {googleAdsLinksId}, property ID {propertiesId}. slots: adsPersonalizationEnabled: requestBody.adsPersonalizationEnabled googleAdsLinksId: path.googleAdsLinksId propertiesId: path.propertiesId - text: 'Beta admin: patch fields {updateMask} of Google Ads link {googleAdsLinksId} in property ID {propertiesId}.' slots: updateMask: query.updateMask googleAdsLinksId: path.googleAdsLinksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/keyEvents'].get update: x-apievangelist-phrasing: intent: List key events (v1beta) effect: read questions: - In v1beta, which key events does a property ID track? - Can the beta key event list be paged? instructions: - text: On v1beta, get key events of property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta admin: key events for property ID {propertiesId}, {pageSize} at a time.' slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/keyEvents'].post update: x-apievangelist-phrasing: intent: Create a key event (v1beta) effect: write questions: - Using the beta admin API, can I promote an event to a key event? - Can v1beta set a key event's counting method at creation? instructions: - text: On v1beta, promote {eventName} to a key event on property ID {propertiesId}. slots: eventName: requestBody.eventName propertiesId: path.propertiesId - text: 'Beta admin: new key event {eventName} counted {countingMethod}, property ID {propertiesId}.' slots: eventName: requestBody.eventName countingMethod: requestBody.countingMethod propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/keyEvents/{keyEventsId}'].get update: x-apievangelist-phrasing: intent: Get a key event (v1beta) effect: read questions: - In v1beta, is a particular key event custom and deletable? - Can the beta admin API fetch a key event by ID? instructions: - text: On v1beta, get key event {keyEventsId} of property ID {propertiesId}. slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId - text: 'Beta admin: describe key event {keyEventsId} for property ID {propertiesId}.' slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/keyEvents/{keyEventsId}'].delete update: x-apievangelist-phrasing: intent: Delete a key event (v1beta) effect: destructive questions: - Using v1beta, can I demote a key event back to a normal event? - Is a v1beta key event removal permanent? instructions: - text: On v1beta, remove key event {keyEventsId} of property ID {propertiesId}. slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId - text: 'Beta admin: demote key event {keyEventsId} for property ID {propertiesId}.' slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/keyEvents/{keyEventsId}'].patch update: x-apievangelist-phrasing: intent: Update a key event (v1beta) effect: write questions: - In v1beta, can I change how a key event is counted? - Can the beta API give a key event a new default value? instructions: - text: On v1beta, count key event {keyEventsId} of property ID {propertiesId} as {countingMethod}. slots: keyEventsId: path.keyEventsId propertiesId: path.propertiesId countingMethod: requestBody.countingMethod - text: 'Beta admin: default value {defaultValue} for key event {keyEventsId}, property ID {propertiesId}.' slots: defaultValue: requestBody.defaultValue keyEventsId: path.keyEventsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/metadata'].get update: x-apievangelist-phrasing: intent: List report dimensions and metrics (v1alpha) effect: read questions: - With the alpha Data API, which dimensions and metrics can I use in reports for a property? - Does v1alpha metadata include my property's custom dimensions? instructions: - text: Via v1alpha Data API, list reportable fields for property {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Alpha Data API: show custom and standard dimensions and metrics available on property {propertiesId}.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/propertyQuotasSnapshot'].get update: x-apievangelist-phrasing: intent: Check a property's reporting quotas effect: read questions: - How much Data API quota has my property used, by category? - Does checking the quota snapshot itself consume quota? instructions: - text: Get the quota snapshot for property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show remaining reporting quota by category on property {propertiesId}. slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}:runFunnelReport'].post update: x-apievangelist-phrasing: intent: Run a funnel report effect: read questions: - Can I measure how many users complete each step of my checkout funnel? - Can a funnel report break down steps by a dimension or show next actions? instructions: - text: Run a funnel report on property {propertiesId} with steps {funnel}. slots: propertiesId: path.propertiesId funnel: requestBody.funnel - text: Build funnel {funnel} for property {propertiesId} over {dateRanges}, broken down by {funnelBreakdown}. slots: funnel: requestBody.funnel propertiesId: path.propertiesId dateRanges: requestBody.dateRanges funnelBreakdown: requestBody.funnelBreakdown method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}:runReport'].post update: x-apievangelist-phrasing: intent: Run a report with comparisons (v1alpha) effect: read questions: - With the alpha Data API, can a report include comparisons and a conversion spec? - Does v1alpha runReport support cohort specs? instructions: - text: Via v1alpha Data API, report {metrics} on property {propertiesId} with comparisons {comparisons}. slots: metrics: requestBody.metrics propertiesId: path.propertiesId comparisons: requestBody.comparisons - text: 'Alpha Data API: run {metrics} by {dimensions} for property {propertiesId} using conversion spec {conversionSpec}.' slots: metrics: requestBody.metrics dimensions: requestBody.dimensions propertiesId: path.propertiesId conversionSpec: requestBody.conversionSpec method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audienceLists'].get update: x-apievangelist-phrasing: intent: List audience lists effect: read questions: - Which audience lists already exist for my property so I can reuse one? - Can I page through a property's audience lists? instructions: - text: List audience lists on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show audience lists for property {propertiesId}, page {pageToken}. slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audienceLists'].post update: x-apievangelist-phrasing: intent: Create an audience list effect: write questions: - Can I snapshot the users in an audience into a list I can query later? - Can an audience list notify a webhook when it is ready? instructions: - text: Create an audience list of {audience} on property {propertiesId}. slots: audience: requestBody.audience propertiesId: path.propertiesId - text: Build audience list for {audience} on property {propertiesId} and notify {webhookNotification}. slots: audience: requestBody.audience propertiesId: path.propertiesId webhookNotification: requestBody.webhookNotification method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audienceLists/{audienceListsId}'].get update: x-apievangelist-phrasing: intent: Get an audience list's status effect: read questions: - Is my audience list finished building or still in progress? - How many rows ended up in a specific audience list? instructions: - text: Show audience list {audienceListsId} on property {propertiesId}. slots: audienceListsId: path.audienceListsId propertiesId: path.propertiesId - text: Check the build state of audience list {audienceListsId} in property {propertiesId}. slots: audienceListsId: path.audienceListsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/audienceLists/{audienceListsId}:query'].post update: x-apievangelist-phrasing: intent: Fetch users in an audience list effect: read questions: - Once an audience list is ready, how do I read the users in it? - Can I page through audience list rows with offset and limit? instructions: - text: Query users from audience list {audienceListsId} on property {propertiesId}. slots: audienceListsId: path.audienceListsId propertiesId: path.propertiesId - text: Read {limit} rows at offset {offset} from audience list {audienceListsId} in property {propertiesId}. slots: limit: requestBody.limit offset: requestBody.offset audienceListsId: path.audienceListsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/recurringAudienceLists'].get update: x-apievangelist-phrasing: intent: List recurring audience lists effect: read questions: - Which daily recurring audience lists are set up on my property? - Can I find an existing recurring audience list instead of making another? instructions: - text: List recurring audience lists on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show daily recurring lists for property {propertiesId}, {pageSize} per page. slots: propertiesId: path.propertiesId pageSize: query.pageSize method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/recurringAudienceLists'].post update: x-apievangelist-phrasing: intent: Create a recurring audience list effect: write questions: - Can GA4 produce a fresh audience list every day automatically? - How many active days does a recurring audience list keep running? instructions: - text: Create a recurring audience list for {audience} on property {propertiesId}. slots: audience: requestBody.audience propertiesId: path.propertiesId - text: Set up a daily recurring list of {audience} on property {propertiesId} with webhook {webhookNotification}. slots: audience: requestBody.audience propertiesId: path.propertiesId webhookNotification: requestBody.webhookNotification method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/recurringAudienceLists/{recurringAudienceListsId}'].get update: x-apievangelist-phrasing: intent: Get a recurring audience list effect: read questions: - Which audience lists has a recurring list produced so far? - How many active days remain on a recurring audience list? instructions: - text: Show recurring audience list {recurringAudienceListsId} on property {propertiesId}. slots: recurringAudienceListsId: path.recurringAudienceListsId propertiesId: path.propertiesId - text: Check days remaining for recurring list {recurringAudienceListsId} in property {propertiesId}. slots: recurringAudienceListsId: path.recurringAudienceListsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportTasks'].get update: x-apievangelist-phrasing: intent: List report tasks effect: read questions: - What asynchronous report tasks have been created for my property? - Can I page through a property's report tasks? instructions: - text: List report tasks on property {propertiesId}. slots: propertiesId: path.propertiesId - text: Show async report tasks for property {propertiesId}, page {pageToken}. slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportTasks'].post update: x-apievangelist-phrasing: intent: Start an asynchronous report task effect: write questions: - Can I kick off a large GA4 report that runs in the background? - How long is a report task kept after it is created? instructions: - text: Create a report task on property {propertiesId} with definition {reportDefinition}. slots: propertiesId: path.propertiesId reportDefinition: requestBody.reportDefinition - text: Start a background report for property {propertiesId} using {reportDefinition}. slots: propertiesId: path.propertiesId reportDefinition: requestBody.reportDefinition method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportTasks/{reportTasksId}'].get update: x-apievangelist-phrasing: intent: Check a report task's status effect: read questions: - Is my background report task done processing yet? - Can I inspect the definition of a report task I created? instructions: - text: Show report task {reportTasksId} on property {propertiesId}. slots: reportTasksId: path.reportTasksId propertiesId: path.propertiesId - text: Check processing state of report task {reportTasksId} in property {propertiesId}. slots: reportTasksId: path.reportTasksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1alpha/properties/{propertiesId}/reportTasks/{reportTasksId}:query'].post update: x-apievangelist-phrasing: intent: Read a finished report task's rows effect: read questions: - How do I get the results of a report task once it is active? - Why does fetching report task content fail before it is ACTIVE? instructions: - text: Fetch results of report task {reportTasksId} on property {propertiesId}. slots: reportTasksId: path.reportTasksId propertiesId: path.propertiesId - text: Read {limit} rows from offset {offset} of report task {reportTasksId} in property {propertiesId}. slots: limit: requestBody.limit offset: requestBody.offset reportTasksId: path.reportTasksId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}:batchRunPivotReports'].post update: x-apievangelist-phrasing: intent: Batch pivot reports (v1beta by property ID) effect: read questions: - Using the beta Data API with a numeric property ID, can I send pivot requests together? - Is there a limit to mixing properties in one v1beta pivot batch? instructions: - text: On v1beta Data API, batch pivot requests {requests} for property ID {propertiesId}. slots: requests: requestBody.requests propertiesId: path.propertiesId - text: 'Beta data: several pivot tables at once for property ID {propertiesId}.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}:batchRunReports'].post update: x-apievangelist-phrasing: intent: Batch standard reports (v1beta by property ID) effect: read questions: - With the beta Data API and a property ID, can I combine report requests into one call? - Do v1beta batched reports all have to be for one property? instructions: - text: On v1beta Data API, batch report requests {requests} for property ID {propertiesId}. slots: requests: requestBody.requests propertiesId: path.propertiesId - text: 'Beta data: run several core reports together for property ID {propertiesId}.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}:checkCompatibility'].post update: x-apievangelist-phrasing: intent: Check field compatibility (v1beta by property ID) effect: read questions: - Using the beta Data API, can I test a dimension and metric combo before running a report? - What does v1beta return when my requested fields clash? instructions: - text: On v1beta Data API, test whether {dimensions} and {metrics} fit together for property ID {propertiesId}. slots: dimensions: requestBody.dimensions metrics: requestBody.metrics propertiesId: path.propertiesId - text: 'Beta data: which fields stay compatible for property ID {propertiesId} given filter {compatibilityFilter}.' slots: propertiesId: path.propertiesId compatibilityFilter: requestBody.compatibilityFilter method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/metadata'].get update: x-apievangelist-phrasing: intent: List report dimensions and metrics (v1beta) effect: read questions: - Using the beta Data API, what API names do my property's custom metrics have? - Can v1beta metadata tell me every field I can query? instructions: - text: On v1beta Data API, get report metadata for property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta data: every dimension and metric API name for property ID {propertiesId}.' slots: propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}:runPivotReport'].post update: x-apievangelist-phrasing: intent: Run a pivot report (v1beta by property ID) effect: read questions: - With the beta Data API, can I cross-tabulate metrics by two dimensions for a property ID? - Does v1beta pivot reporting support comparisons? instructions: - text: On v1beta Data API, pivot {metrics} using {pivots} for property ID {propertiesId}. slots: metrics: requestBody.metrics pivots: requestBody.pivots propertiesId: path.propertiesId - text: 'Beta data: cross-tab for property ID {propertiesId} across {dateRanges} with comparisons {comparisons}.' slots: propertiesId: path.propertiesId dateRanges: requestBody.dateRanges comparisons: requestBody.comparisons method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}:runRealtimeReport'].post update: x-apievangelist-phrasing: intent: Run a realtime report (v1beta by property ID) effect: read questions: - Using the beta Data API, which pages are people viewing right now on a property ID? - How many minutes back can a v1beta realtime report look? instructions: - text: On v1beta Data API, live {metrics} for property ID {propertiesId}. slots: metrics: requestBody.metrics propertiesId: path.propertiesId - text: 'Beta data: realtime {metrics} by {dimensions} in minute ranges {minuteRanges} for property ID {propertiesId}.' slots: metrics: requestBody.metrics dimensions: requestBody.dimensions minuteRanges: requestBody.minuteRanges propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}:runReport'].post update: x-apievangelist-phrasing: intent: Run a core report (v1beta by property ID) effect: read questions: - With the beta Data API, what were my property's page views by page title last week? - Can a v1beta report keep empty rows and add metric totals? instructions: - text: On v1beta Data API, report {metrics} by {dimensions} for property ID {propertiesId}. slots: metrics: requestBody.metrics dimensions: requestBody.dimensions propertiesId: path.propertiesId - text: 'Beta data: {metrics} with aggregations {metricAggregations} over {dateRanges} for property ID {propertiesId}.' slots: metrics: requestBody.metrics metricAggregations: requestBody.metricAggregations dateRanges: requestBody.dateRanges propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/audienceExports'].get update: x-apievangelist-phrasing: intent: List audience exports (v1beta by property ID) effect: read questions: - Using the beta Data API, which audience exports exist for a property ID? - Can I page v1beta audience exports to find one to reuse? instructions: - text: On v1beta Data API, get audience exports of property ID {propertiesId}. slots: propertiesId: path.propertiesId - text: 'Beta data: audience exports for property ID {propertiesId}, next page {pageToken}.' slots: propertiesId: path.propertiesId pageToken: query.pageToken method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/audienceExports'].post update: x-apievangelist-phrasing: intent: Start an audience export (v1beta by property ID) effect: write questions: - With the beta Data API, can I start exporting an audience for a property ID? - Does a v1beta audience export report percentage completed while building? instructions: - text: On v1beta Data API, start exporting audience {audience} for property ID {propertiesId}. slots: audience: requestBody.audience propertiesId: path.propertiesId - text: 'Beta data: export {audience} with dimensions {dimensions}, property ID {propertiesId}.' slots: audience: requestBody.audience dimensions: requestBody.dimensions propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/audienceExports/{audienceExportsId}'].get update: x-apievangelist-phrasing: intent: Check an audience export's status effect: read questions: - Is my audience export ready to query, and how many rows does it have? - Did an audience export fail, and what was the error message? instructions: - text: Show audience export {audienceExportsId} on property {propertiesId}. slots: audienceExportsId: path.audienceExportsId propertiesId: path.propertiesId - text: Check state and row count of audience export {audienceExportsId} in property {propertiesId}. slots: audienceExportsId: path.audienceExportsId propertiesId: path.propertiesId method: generated generated: '2026-09-26' - target: $.paths['/v1beta/properties/{propertiesId}/audienceExports/{audienceExportsId}:query'].post update: x-apievangelist-phrasing: intent: Read users from an audience export (v1beta by property ID) effect: read questions: - With the beta Data API, how do I download the users in an audience export by its ID? - Can v1beta audience export rows be read in pages? instructions: - text: On v1beta Data API, read users of audience export {audienceExportsId} for property ID {propertiesId}. slots: audienceExportsId: path.audienceExportsId propertiesId: path.propertiesId - text: 'Beta data: {limit} export rows after {offset} from export {audienceExportsId}, property ID {propertiesId}.' slots: limit: requestBody.limit offset: requestBody.offset audienceExportsId: path.audienceExportsId propertiesId: path.propertiesId method: generated generated: '2026-09-26'