[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698XCNR4VNXQ9PCBYCGQRM1":3,"skill-same:01M698XCNR4VNXQ9PCBYCGQRM1":115},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":51,"linkOnly":52,"markdownContent":53,"markdownBody":54,"frontMatter":55,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":68,"ownerDescription":69,"updatedAt":70,"install":71,"resources":84},"01M698XCNR4VNXQ9PCBYCGQRM1","google-ads-api-quickstart",null,"Guides developers through Google Ads API quickstart: credential setup, choosing from 6 client libraries\u002FREST, configuring environments, and running a \"retrieve campaigns\" script. Troubleshoots common setup errors: USER_PERMISSION_DENIED, login_customer_id issues, and CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION (a Google Cloud project with Test access calling a production account).\n\nUse this skill when:\n- The user asks how to get started with the Google Ads API.\n- The user needs to set up Google Ads API access in a Google Cloud project or OAuth credentials.\n- The user wants to write a quickstart\u002Fexample script for Google Ads.\n- The user encounters errors like USER_PERMISSION_DENIED, CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION, or the legacy DEVELOPER_TOKEN_NOT_APPROVED.","google\u002Fskills","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M698WR0H76ENHE587T9EJT89",24122,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[32,33,34,35,36,9,37,38,39,40,41,42,43,44,45,46,47,48,49,50],"google ads api quickstart","ads","quickstart","google ads","api","get started","client","connectivity","id","use","tokens","for","developer","write","login","how","guides","team","resources","2026-11-10 10:12:30",false,"---\nname: google-ads-api-quickstart\ndescription: |\n  Guides developers through Google Ads API quickstart: credential setup, choosing from 6 client libraries\u002FREST, configuring environments, and running a \"retrieve campaigns\" script. Troubleshoots common setup errors: USER_PERMISSION_DENIED, login_customer_id issues, and CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION (a Google Cloud project with Test access calling a production account).\n\n  Use this skill when:\n  - The user asks how to get started with the Google Ads API.\n  - The user needs to set up Google Ads API access in a Google Cloud project or OAuth credentials.\n  - The user wants to write a quickstart\u002Fexample script for Google Ads.\n  - The user encounters errors like USER_PERMISSION_DENIED, CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION, or the legacy DEVELOPER_TOKEN_NOT_APPROVED.\ncompatibility: \"Outbound HTTPS connectivity required to access the Google Ads API and documentation. Note: If network access is restricted, the agent will fall back to using the last-known stable versions cached within the skill resources.\"\nmetadata:\n  author: google-ads-api-team\n  version: \"1.1.0\"\n  category: GoogleAds\n---\n# Google Ads API Quickstart\nThis skill guides you from absolute zero to running your first successful request to retrieve campaigns.\n\n## Supported Tracks\nYou can choose to use this skill with:\n\n1. **Official Client Libraries:** Python, Java, .NET, PHP, Ruby, or Perl.\n2. **Direct REST:** Raw HTTP REST requests.\n\n---\n\n## Crucial Requirement: Dynamic Version Resolution & Runtime Resolution\n\n> [!IMPORTANT]\n> To ensure the integration is secure, stable, and up-to-date, you must resolve all API and runtime versions dynamically. Do not rely on hardcoded defaults.\n\n### Strict Constraints:\n\n*   **DO NOT Hardcode:** Never use hardcoded Google Ads API versions (e.g., `v24`) or language runtime versions (e.g., `Python 3.8+`, `Java 11+`) in generated code or environment setup instructions, unless the user explicitly requests a specific version.\n*   **MANDATORY Dynamic Resolution:** You must dynamically resolve the latest stable versions *at the start of execution* before generating any code or configuration, using the procedures detailed below.\n\n### A. Dynamic API Version Resolution\nTo ensure the integration is secure, stable, and up-to-date, you **MUST** resolve the absolute newest stable major version of the Google Ads API dynamically.\n\n#### Execution Steps:\n\n1.  **Pre-Flight Version Resolution:** Use your web search or URL-reading tools to inspect the latest entry in the [Google Ads API Release Notes](https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Frelease-notes.md.txt) or the highest versioned directory in the [Googleapis Github Repository](https:\u002F\u002Fgithub.com\u002Fgoogleapis\u002Fgoogleapis\u002Ftree\u002Fmaster\u002Fgoogle\u002Fads\u002Fgoogleads) to resolve `RESOLVED_API_VERSION` (e.g., `v24`). If using Java, you **MUST** also resolve the latest stable release version of the Google Ads Java Client Library (referred to as `RESOLVED_LIBRARY_VERSION`, e.g., `34.0.0`).\n\n2.  **Mandatory Response Anchor:** You **MUST** output the following confirmation block as the **very first line** of your response to the user. Do not output any greeting, pleasantries, or introductory text before this block.\n    \n    ```text\n    [SYSTEM: Using Google Ads API version: RESOLVED_API_VERSION (Resolved from release notes)]\n    ```\n\n3.  **Strict Placeholder Mapping Table:** You **MUST** perform on-the-fly search-and-replace on all code templates and reference files using the mapping table below. Do not leave raw placeholders in the final output.\n\n    | Target Language \u002F Tech | Placeholder in Template | Replacement Pattern | Example (Assuming API `v24`) |\n    | :--- | :--- | :--- | :--- |\n    | **Java** (Maven\u002FGradle) | `LATEST_LIBRARY_VERSION` | Search & substitute the latest Maven release version of the library. | `34.0.0` |\n    | **Java** (Imports) | `vXX` | Replace with **lower-case** API version. | `com.google.ads.googleads.v24` |\n    | **.NET \u002F C#** (Namespaces) | `VXX` | Replace with **title-case** API version. | `Google.Ads.GoogleAds.V24` |\n    | **PHP** (Namespaces) | `VXX` | Replace with **title-case** API version. | `Google\\Ads\\GoogleAds\\V24` |\n    | **REST** (Endpoint URL) | `vXX` | Replace with **lower-case** API version. | `https:\u002F\u002Fgoogleads.googleapis.com\u002Fv24\u002F...` |\n\n> [!TIP]\n> **Offline Fallback:** If the URLs are unreachable or the scrape fails, do not halt execution. Fall back to these last-known stable versions:\n> *   **Google Ads API Major Version (`RESOLVED_API_VERSION`):** `v24`\n> *   **Java Client Library Version (`RESOLVED_LIBRARY_VERSION`):** `34.0.0`\n\n### B. Dynamic Language Runtime Version Resolution\nTo prevent the generated setup guides from becoming obsolete due to language deprecation cycles, you **MUST** resolve language requirements dynamically.\n\n#### Execution Steps:\n\n1.  **Fetch Live Requirements:** Use your URL-reading tools to inspect the official [Google Ads Client Libraries - Supported Versions](https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Fclient-libs.md.txt#supported_api_versions) page.\n\n2.  **Extract Minimums:** Identify the minimum supported runtime version for the user's chosen language by scanning the Overview page or compatibility tables (e.g., looking for explicit requirements like Python 3.8+, Java 11+, .NET 6.0+, PHP 8.1+, Ruby 3.0+).\n\n3.  **Apply On-The-Fly:** Substitute all runtime placeholders (e.g., `\u003CPYTHON_MIN_VERSION>`) in your generated setup guides with these resolved versions.\n\n> [!TIP]\n> **Offline Fallback:** If the URL is unreachable or the scrape fails, do not halt execution. Fall back to these last-known safe minimum versions:\n> *   **Python:** `3.9+`\n> *   **Java:** `11+`\n> *   **.NET:** `6.0+`\n> *   **PHP:** `8.1+`\n> *   **Ruby:** `3.0+`\n> *   **Perl:** `5.28.1+`\n\n---\n\n## Step 1: Obtain Google Ads API Credentials\n\nBefore installing libraries or making API calls, you need a Google Cloud\nproject with Google Ads API access and four authentication parameters.\n\n> [!NOTE]\n> **Developer tokens were sunset on September 9, 2026.** API access levels now\n> belong to the Google Cloud project that owns your OAuth client (or service\n> account). Do not send the user to the API Center in a Google Ads manager\n> account to request a developer token; those requests are no longer processed.\n> Existing `developer_token` values in configuration files are ignored by the\n> API and can be removed.\n\n### 1. Google Cloud Project with Google Ads API Access\n\n*   **Purpose:** Holds your API access level and quota. The project that owns your OAuth client ID (or service account) determines which accounts you can call and how many operations per day you get.\n*   **How to Obtain:**\n    1. Open the [Google Ads API Overview page](https:\u002F\u002Fconsole.cloud.google.com\u002Fgoogle\u002Fads-apis\u002Foverview) in the Google Cloud Console and select (or create) a project.\n    2. Click **Enable**. Enabling the API grants **Test access**: up to 15,000 operations per day against Google Ads **test accounts** only.\n    3. To call **production** accounts, apply for **Explorer access** from the\n       same Overview page (review is automated in most cases; up to 2,880\n       operations per day). **Basic** and **Standard** access are applied for\n       from the same page and require brand verification for the project.\n    4. If your team already had a developer token, its access level was transferred to the Cloud projects that used it in the 90 days before the sunset. Check the Overview page, not the API Center.\n\n> [!WARNING]\n> **Test Access Restriction:** If your Cloud project only has Test access, you\n> **MUST ONLY** target **Google Ads Test Accounts**. Calling a production\n> account fails with `CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION` (API v25 and\n> later) or `ACTION_NOT_PERMITTED` (v24 and earlier).\n\n### 2. OAuth2 Client ID & Client Secret\n\n*   **Purpose:** Identifies your application to Google's OAuth 2.0 server and allows you to request user authorization.\n*   **How to Obtain:**\n    1. Open the [Google Cloud Console](https:\u002F\u002Fconsole.cloud.google.com\u002F).\n    2. Create a new project (or select an existing one).\n    3. Search for the **Google Ads API** in the API Library and click\n       **Enable** (skip if you already enabled it in Section 1). Use the\n       **same project** as in Section 1: the project that owns the OAuth client\n       determines your API access level.\n    4. Configure the **OAuth Consent Screen**:\n       *   Select **External** user type.\n       *   Set the Publishing Status to **Testing**.\n       *   > [!IMPORTANT]\n       *   > **Add Test Users:** You **MUST** add the email address of the Google account you use to log into Google Ads as a **Test User** in this step. Otherwise, you will be blocked during authorization.\n    5. Create the OAuth Client:\n       *   Go to **APIs & Services 🡒 Credentials**.\n       *   Click **Create Credentials 🡒 OAuth client ID**.\n       *   Select **Desktop App** as the Application Type.\n       *   Name the client and click **Create**.\n    6. **Download Secrets:** Click the download icon (JSON) next to your newly created Client ID. Save this file locally as `client_secrets.json`.\n\n### 3. OAuth2 Refresh Token\n\n*   **Purpose:** Allows your application to obtain new access tokens automatically without requiring manual user login every hour.\n*   **How to Obtain:**\n    You must run the Google Cloud (`gcloud`) CLI to generate your refresh token.\n\n    #### 1. Install and Verify gcloud CLI:\n    Ensure the [gcloud CLI](https:\u002F\u002Fcloud.google.com\u002Fsdk\u002Fdocs\u002Finstall) is installed and available in your terminal.\n\n    #### 2. Execute the Login Flow:\n    Run the following command in your terminal, passing the path to the `client_secrets.json` file downloaded in the previous step:\n    \n    ```bash\n    gcloud auth application-default login \\\n      --scopes=https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fadwords,https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fcloud-platform \\\n      --client-id-file=client_secrets.json\n    ```\n\n    #### 3. Authorize in Browser:\n    1. The command will open a Google Account login window in your browser.\n    2. Sign in using the **Test User** email registered in your OAuth Consent Screen setup.\n    3. If your app is unverified, click **Advanced** and continue to the project. Click **Continue** to grant permissions.\n\n    #### 4. Retrieve Your Refresh Token:\n    Once successful, `gcloud` will output a message indicating where the credentials were saved (typically `~\u002F.config\u002Fgcloud\u002Fapplication_default_credentials.json`). Open that file to copy your `refresh_token`.\n\n### 4. Client Customer ID\n\n*   **Purpose:** The 10-digit ID of the specific Google Ads account you want to query or make changes to.\n*   **Format:** Must be 10 digits with **no hyphens** (e.g., `1234567890`, NOT `123-456-7890`).\n*   **How to Find It:** Log in to the Google Ads UI; the ID is displayed in the top-right corner next to your user icon.\n\n> [!IMPORTANT]\n> **Test Account Requirement:** If your Google Cloud project only has Test\n> access, this **MUST** be the Customer ID of a **Test Account**. Test accounts\n> have a red \"Test account\" banner in the top right of the UI.\n\n---\n\n### 5. Login Customer ID\n\n*   **What it is:** The 10-digit Customer ID of the Google Ads Manager Account that owns or manages the target client account.\n*   **Format:** Must be 10 digits with **no hyphens** (e.g., `9876543210`).\n*   **When to Use:** This is **mandatory** if the OAuth user belongs to a Manager Account, but you are querying a child\u002Fclient account (Client Customer ID).\n\n> [!CAUTION]\n> **Preventing `USER_PERMISSION_DENIED`:**\n> If you are accessing a client account through a Manager Account hierarchy, you **MUST** set this parameter.\n> *   `login_customer_id` = The **Manager** Account ID.\n> *   `client_customer_id` = The **Child\u002FClient** Account ID.\n> Leaving `login_customer_id` blank in a manager-client hierarchy is the #1 cause of permission errors.\n\n---\n\n## Step 2: Choose Your Integration Strategy\n\nDevelopers can connect to the Google Ads API using either the official high-level client libraries or direct HTTPS REST requests.\n\n### Path A: Official Client Libraries (Recommended)\n\n> [!IMPORTANT]\n> **Mandatory Agent Directive:** Once the user selects their language, you **MUST**:\n> 1. Use the `view_file` tool to lazy-load the corresponding reference file listed below.\n> 2. Apply the **Dynamic Version Resolution** (Section B) to dynamically replace all `vXX`\u002F`VXX` placeholders and library versions *before* generating code.\n\n#### Python\nIf you need to set up the Google Ads API environment for Python, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API Python Setup Reference](references\u002Fpython.md)\n*(Package: `google-ads`)*\n\n#### Java\nIf you need to set up the Google Ads API environment for Java, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API Java Setup Reference](references\u002Fjava.md)\n*(Artifact: `com.google.api-ads:google-ads`)*\n\n#### .NET \u002F C#\nIf you need to set up the Google Ads API environment for .NET\u002FC#, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API .NET Setup Reference](references\u002Fdotnet.md)\n*(Package: `Google.Ads.GoogleAds`)*\n\n#### PHP\nIf you need to set up the Google Ads API environment for PHP, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API PHP Setup Reference](references\u002Fphp.md)\n*(Package: `googleads\u002Fgoogle-ads-php`)*\n\n#### Ruby\nIf you need to set up the Google Ads API environment for Ruby, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API Ruby Setup Reference](references\u002Fruby.md)\n*(Gem: `google-ads-ruby`)*\n\n#### Perl\nIf you need to set up the Google Ads API environment for Perl, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API Perl Setup Reference](references\u002Fperl.md)\n*(Package: `Google::Ads::GoogleAds::Client`)*\n\n### Path B: Direct HTTP REST (No Library Overhead)\n\nUse this path if the user's environment does not support the official client libraries (e.g., lightweight serverless functions, custom language stacks, or restricted runtimes).\n\n> [!IMPORTANT]\n> **Mandatory Agent Directive:** If the user chooses the REST path, you **MUST**:\n> 1. Use the `view_file` tool to lazy-load the REST reference file below.\n> 2. Apply **Dynamic Version Resolution** (Section B) to replace all `vXX` placeholders in the endpoint URLs (e.g., resolving `vXX` to `v24` in `https:\u002F\u002Fgoogleads.googleapis.com\u002Fv24\u002F...`).\n\n#### REST (HTTP)\nIf you need to set up the Google Ads API environment for REST (HTTP), do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API REST Setup Reference](references\u002Frest.md)\n*(Protocol: Raw HTTP POST JSON)*\n\n---\n\n## Cross-Referencing: AI-Assistant & MCP Connection\n\n> [!TIP]\n> **AI Assistant \u002F MCP Integration Handoff:**\n> If the goal is to connect an **AI Assistant** (such as Gemini, Cursor, or Claude Code) to query Google Ads via natural language:\n> 1. **DO NOT** write custom scripts or client library code.\n> 2. **STOP** executing this skill.\n> 3. **Transition Immediately** to the **`google-ads-api-mcp-setup`** skill to install and configure the official Google Ads Model Context Protocol (MCP) Server.\n\n---\n\n## Step 4: Troubleshooting Common Errors\n\n> [!IMPORTANT]\n> **Static Diagnostics Constraint:** When troubleshooting, you **MUST NOT** execute bash commands, run local test scripts, or attempt to reproduce the error in the workspace. Rely entirely on static code analysis, configuration review, and the diagnostic guides below to prevent endless, failing execution loops.\n\n### 1. Error: `USER_PERMISSION_DENIED`\n\n*   **Symptom:** You receive a `USER_PERMISSION_DENIED` error when executing API requests (e.g., retrieving campaigns).\n*   **Likely Cause:** The authenticating OAuth2 user has access to the target client account *indirectly* through a **Manager Account**, but the request header is missing the Manager Account's ID.\n\n#### Required Agent Response Checklist:\nWhen helping a user with this error, your response **MUST** include:\n\n1.  [ ] **Explain the Hierarchy:** Explain that the authenticating user likely belongs to a Manager Account that sits above the target client account.\n2.  [ ] **Provide the Fix:** Instruct the user to add their 10-digit Manager Account ID as the `login_customer_id` in their configuration file.\n3.  [ ] **Explain the Routing Logic:** Explain that `login_customer_id` tells the API to route the OAuth credentials through the manager account to validate access to the child account.\n4.  [ ] **Provide the Configuration Template:** Show the exact YAML configuration block below.\n\n> [!CAUTION]\n> **Security Guardrail:** Under no circumstances should you suggest exposing\n> raw passwords, creating additional Google Cloud projects to avoid\n> access-level review, or widening OAuth scopes beyond the standard `adwords`\n> scope to bypass this error.\n\n#### Configuration Fix Example (`google-ads.yaml`):\n\n```yaml\nclient_id: INSERT_OAUTH2_CLIENT_ID_HERE\nclient_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE\nrefresh_token: INSERT_OAUTH2_REFRESH_TOKEN_HERE\n\n# Add your 10-digit Manager Account ID here to resolve USER_PERMISSION_DENIED:\nlogin_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE\n```\n\n### 2. Error: `CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION`\n\n*   **Symptom:** The script fails with `AuthorizationError.CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION` (API v25 and later) or `AuthorizationError.ACTION_NOT_PERMITTED` (v24 and earlier).\n*   **Likely Cause:** The Google Cloud project that owns your OAuth client has only **Test access**, and you are targeting a live production Google Ads account.\n*   **Legacy Variant:** Code that still sends a developer token may report\n    `DEVELOPER_TOKEN_NOT_APPROVED`. Developer tokens were sunset on\n    September 9, 2026. The fix is the same (the access level of the Cloud\n    project), plus upgrading the client library to a version that no longer\n    requires the token.\n\n#### Required Agent Response Checklist:\nWhen helping a user with this error, your response **MUST** include:\n\n1.  [ ] **Explain the Test Access Restriction:** Explain that a Cloud project with Test access is fully functional but **restricted to Google Ads Test Accounts only**.\n2.  [ ] **Define Production Access Levels:** You **MUST** explicitly list all\n    three access levels by name: state that targeting live production accounts\n    requires the Cloud project to hold **Explorer Access**, **Basic Access**,\n    or **Standard Access**, applied for on the\n    [Google Ads API Overview page](https:\u002F\u002Fconsole.cloud.google.com\u002Fgoogle\u002Fads-apis\u002Foverview)\n    in the Google Cloud Console. Do not condense or paraphrase this to \"at\n    least Basic Access\".\n3.  [ ] **Check the Right Project:** Remind the user that the access level is\n    read from the project that owns the OAuth client ID (user authentication)\n    or the service account (service account authentication), not from the\n    project currently selected in `gcloud`.\n4.  [ ] **Provide Sandbox Setup Steps:** Guide the user on how to set up a sandbox environment:\n    *   Create a **Test Manager Account** (available with Test access).\n    *   Create **Test Client Accounts** under that Test Manager.\n    *   Use the Test Client Customer ID in their configuration.\n5.  [ ] **Provide Links to the Guides:** Point the user to the official [Google Ads API Test Accounts Guide](https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Fbest-practices\u002Ftest-accounts.md.txt) and the [API access levels guide](https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Fapi-policy\u002Faccess-levels.md.txt).\n\n> [!CAUTION]\n> **Security & Integrity Guardrail:** You **MUST NOT** advise the developer to\n> modify the client library source code, bypass access-level checks, or use\n> third-party \"cracked\" wrappers to bypass this error. The restriction is\n> enforced server-side by Google, and client-side modifications will not work.\n\n","# Google Ads API Quickstart\nThis skill guides you from absolute zero to running your first successful request to retrieve campaigns.\n\n## Supported Tracks\nYou can choose to use this skill with:\n\n1. **Official Client Libraries:** Python, Java, .NET, PHP, Ruby, or Perl.\n2. **Direct REST:** Raw HTTP REST requests.\n\n---\n\n## Crucial Requirement: Dynamic Version Resolution & Runtime Resolution\n\n> [!IMPORTANT]\n> To ensure the integration is secure, stable, and up-to-date, you must resolve all API and runtime versions dynamically. Do not rely on hardcoded defaults.\n\n### Strict Constraints:\n\n*   **DO NOT Hardcode:** Never use hardcoded Google Ads API versions (e.g., `v24`) or language runtime versions (e.g., `Python 3.8+`, `Java 11+`) in generated code or environment setup instructions, unless the user explicitly requests a specific version.\n*   **MANDATORY Dynamic Resolution:** You must dynamically resolve the latest stable versions *at the start of execution* before generating any code or configuration, using the procedures detailed below.\n\n### A. Dynamic API Version Resolution\nTo ensure the integration is secure, stable, and up-to-date, you **MUST** resolve the absolute newest stable major version of the Google Ads API dynamically.\n\n#### Execution Steps:\n\n1.  **Pre-Flight Version Resolution:** Use your web search or URL-reading tools to inspect the latest entry in the [Google Ads API Release Notes](https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Frelease-notes.md.txt) or the highest versioned directory in the [Googleapis Github Repository](https:\u002F\u002Fgithub.com\u002Fgoogleapis\u002Fgoogleapis\u002Ftree\u002Fmaster\u002Fgoogle\u002Fads\u002Fgoogleads) to resolve `RESOLVED_API_VERSION` (e.g., `v24`). If using Java, you **MUST** also resolve the latest stable release version of the Google Ads Java Client Library (referred to as `RESOLVED_LIBRARY_VERSION`, e.g., `34.0.0`).\n\n2.  **Mandatory Response Anchor:** You **MUST** output the following confirmation block as the **very first line** of your response to the user. Do not output any greeting, pleasantries, or introductory text before this block.\n    \n    ```text\n    [SYSTEM: Using Google Ads API version: RESOLVED_API_VERSION (Resolved from release notes)]\n    ```\n\n3.  **Strict Placeholder Mapping Table:** You **MUST** perform on-the-fly search-and-replace on all code templates and reference files using the mapping table below. Do not leave raw placeholders in the final output.\n\n    | Target Language \u002F Tech | Placeholder in Template | Replacement Pattern | Example (Assuming API `v24`) |\n    | :--- | :--- | :--- | :--- |\n    | **Java** (Maven\u002FGradle) | `LATEST_LIBRARY_VERSION` | Search & substitute the latest Maven release version of the library. | `34.0.0` |\n    | **Java** (Imports) | `vXX` | Replace with **lower-case** API version. | `com.google.ads.googleads.v24` |\n    | **.NET \u002F C#** (Namespaces) | `VXX` | Replace with **title-case** API version. | `Google.Ads.GoogleAds.V24` |\n    | **PHP** (Namespaces) | `VXX` | Replace with **title-case** API version. | `Google\\Ads\\GoogleAds\\V24` |\n    | **REST** (Endpoint URL) | `vXX` | Replace with **lower-case** API version. | `https:\u002F\u002Fgoogleads.googleapis.com\u002Fv24\u002F...` |\n\n> [!TIP]\n> **Offline Fallback:** If the URLs are unreachable or the scrape fails, do not halt execution. Fall back to these last-known stable versions:\n> *   **Google Ads API Major Version (`RESOLVED_API_VERSION`):** `v24`\n> *   **Java Client Library Version (`RESOLVED_LIBRARY_VERSION`):** `34.0.0`\n\n### B. Dynamic Language Runtime Version Resolution\nTo prevent the generated setup guides from becoming obsolete due to language deprecation cycles, you **MUST** resolve language requirements dynamically.\n\n#### Execution Steps:\n\n1.  **Fetch Live Requirements:** Use your URL-reading tools to inspect the official [Google Ads Client Libraries - Supported Versions](https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Fclient-libs.md.txt#supported_api_versions) page.\n\n2.  **Extract Minimums:** Identify the minimum supported runtime version for the user's chosen language by scanning the Overview page or compatibility tables (e.g., looking for explicit requirements like Python 3.8+, Java 11+, .NET 6.0+, PHP 8.1+, Ruby 3.0+).\n\n3.  **Apply On-The-Fly:** Substitute all runtime placeholders (e.g., `\u003CPYTHON_MIN_VERSION>`) in your generated setup guides with these resolved versions.\n\n> [!TIP]\n> **Offline Fallback:** If the URL is unreachable or the scrape fails, do not halt execution. Fall back to these last-known safe minimum versions:\n> *   **Python:** `3.9+`\n> *   **Java:** `11+`\n> *   **.NET:** `6.0+`\n> *   **PHP:** `8.1+`\n> *   **Ruby:** `3.0+`\n> *   **Perl:** `5.28.1+`\n\n---\n\n## Step 1: Obtain Google Ads API Credentials\n\nBefore installing libraries or making API calls, you need a Google Cloud\nproject with Google Ads API access and four authentication parameters.\n\n> [!NOTE]\n> **Developer tokens were sunset on September 9, 2026.** API access levels now\n> belong to the Google Cloud project that owns your OAuth client (or service\n> account). Do not send the user to the API Center in a Google Ads manager\n> account to request a developer token; those requests are no longer processed.\n> Existing `developer_token` values in configuration files are ignored by the\n> API and can be removed.\n\n### 1. Google Cloud Project with Google Ads API Access\n\n*   **Purpose:** Holds your API access level and quota. The project that owns your OAuth client ID (or service account) determines which accounts you can call and how many operations per day you get.\n*   **How to Obtain:**\n    1. Open the [Google Ads API Overview page](https:\u002F\u002Fconsole.cloud.google.com\u002Fgoogle\u002Fads-apis\u002Foverview) in the Google Cloud Console and select (or create) a project.\n    2. Click **Enable**. Enabling the API grants **Test access**: up to 15,000 operations per day against Google Ads **test accounts** only.\n    3. To call **production** accounts, apply for **Explorer access** from the\n       same Overview page (review is automated in most cases; up to 2,880\n       operations per day). **Basic** and **Standard** access are applied for\n       from the same page and require brand verification for the project.\n    4. If your team already had a developer token, its access level was transferred to the Cloud projects that used it in the 90 days before the sunset. Check the Overview page, not the API Center.\n\n> [!WARNING]\n> **Test Access Restriction:** If your Cloud project only has Test access, you\n> **MUST ONLY** target **Google Ads Test Accounts**. Calling a production\n> account fails with `CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION` (API v25 and\n> later) or `ACTION_NOT_PERMITTED` (v24 and earlier).\n\n### 2. OAuth2 Client ID & Client Secret\n\n*   **Purpose:** Identifies your application to Google's OAuth 2.0 server and allows you to request user authorization.\n*   **How to Obtain:**\n    1. Open the [Google Cloud Console](https:\u002F\u002Fconsole.cloud.google.com\u002F).\n    2. Create a new project (or select an existing one).\n    3. Search for the **Google Ads API** in the API Library and click\n       **Enable** (skip if you already enabled it in Section 1). Use the\n       **same project** as in Section 1: the project that owns the OAuth client\n       determines your API access level.\n    4. Configure the **OAuth Consent Screen**:\n       *   Select **External** user type.\n       *   Set the Publishing Status to **Testing**.\n       *   > [!IMPORTANT]\n       *   > **Add Test Users:** You **MUST** add the email address of the Google account you use to log into Google Ads as a **Test User** in this step. Otherwise, you will be blocked during authorization.\n    5. Create the OAuth Client:\n       *   Go to **APIs & Services 🡒 Credentials**.\n       *   Click **Create Credentials 🡒 OAuth client ID**.\n       *   Select **Desktop App** as the Application Type.\n       *   Name the client and click **Create**.\n    6. **Download Secrets:** Click the download icon (JSON) next to your newly created Client ID. Save this file locally as `client_secrets.json`.\n\n### 3. OAuth2 Refresh Token\n\n*   **Purpose:** Allows your application to obtain new access tokens automatically without requiring manual user login every hour.\n*   **How to Obtain:**\n    You must run the Google Cloud (`gcloud`) CLI to generate your refresh token.\n\n    #### 1. Install and Verify gcloud CLI:\n    Ensure the [gcloud CLI](https:\u002F\u002Fcloud.google.com\u002Fsdk\u002Fdocs\u002Finstall) is installed and available in your terminal.\n\n    #### 2. Execute the Login Flow:\n    Run the following command in your terminal, passing the path to the `client_secrets.json` file downloaded in the previous step:\n    \n    ```bash\n    gcloud auth application-default login \\\n      --scopes=https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fadwords,https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fcloud-platform \\\n      --client-id-file=client_secrets.json\n    ```\n\n    #### 3. Authorize in Browser:\n    1. The command will open a Google Account login window in your browser.\n    2. Sign in using the **Test User** email registered in your OAuth Consent Screen setup.\n    3. If your app is unverified, click **Advanced** and continue to the project. Click **Continue** to grant permissions.\n\n    #### 4. Retrieve Your Refresh Token:\n    Once successful, `gcloud` will output a message indicating where the credentials were saved (typically `~\u002F.config\u002Fgcloud\u002Fapplication_default_credentials.json`). Open that file to copy your `refresh_token`.\n\n### 4. Client Customer ID\n\n*   **Purpose:** The 10-digit ID of the specific Google Ads account you want to query or make changes to.\n*   **Format:** Must be 10 digits with **no hyphens** (e.g., `1234567890`, NOT `123-456-7890`).\n*   **How to Find It:** Log in to the Google Ads UI; the ID is displayed in the top-right corner next to your user icon.\n\n> [!IMPORTANT]\n> **Test Account Requirement:** If your Google Cloud project only has Test\n> access, this **MUST** be the Customer ID of a **Test Account**. Test accounts\n> have a red \"Test account\" banner in the top right of the UI.\n\n---\n\n### 5. Login Customer ID\n\n*   **What it is:** The 10-digit Customer ID of the Google Ads Manager Account that owns or manages the target client account.\n*   **Format:** Must be 10 digits with **no hyphens** (e.g., `9876543210`).\n*   **When to Use:** This is **mandatory** if the OAuth user belongs to a Manager Account, but you are querying a child\u002Fclient account (Client Customer ID).\n\n> [!CAUTION]\n> **Preventing `USER_PERMISSION_DENIED`:**\n> If you are accessing a client account through a Manager Account hierarchy, you **MUST** set this parameter.\n> *   `login_customer_id` = The **Manager** Account ID.\n> *   `client_customer_id` = The **Child\u002FClient** Account ID.\n> Leaving `login_customer_id` blank in a manager-client hierarchy is the #1 cause of permission errors.\n\n---\n\n## Step 2: Choose Your Integration Strategy\n\nDevelopers can connect to the Google Ads API using either the official high-level client libraries or direct HTTPS REST requests.\n\n### Path A: Official Client Libraries (Recommended)\n\n> [!IMPORTANT]\n> **Mandatory Agent Directive:** Once the user selects their language, you **MUST**:\n> 1. Use the `view_file` tool to lazy-load the corresponding reference file listed below.\n> 2. Apply the **Dynamic Version Resolution** (Section B) to dynamically replace all `vXX`\u002F`VXX` placeholders and library versions *before* generating code.\n\n#### Python\nIf you need to set up the Google Ads API environment for Python, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API Python Setup Reference](references\u002Fpython.md)\n*(Package: `google-ads`)*\n\n#### Java\nIf you need to set up the Google Ads API environment for Java, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API Java Setup Reference](references\u002Fjava.md)\n*(Artifact: `com.google.api-ads:google-ads`)*\n\n#### .NET \u002F C#\nIf you need to set up the Google Ads API environment for .NET\u002FC#, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API .NET Setup Reference](references\u002Fdotnet.md)\n*(Package: `Google.Ads.GoogleAds`)*\n\n#### PHP\nIf you need to set up the Google Ads API environment for PHP, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API PHP Setup Reference](references\u002Fphp.md)\n*(Package: `googleads\u002Fgoogle-ads-php`)*\n\n#### Ruby\nIf you need to set up the Google Ads API environment for Ruby, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API Ruby Setup Reference](references\u002Fruby.md)\n*(Gem: `google-ads-ruby`)*\n\n#### Perl\nIf you need to set up the Google Ads API environment for Perl, do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API Perl Setup Reference](references\u002Fperl.md)\n*(Package: `Google::Ads::GoogleAds::Client`)*\n\n### Path B: Direct HTTP REST (No Library Overhead)\n\nUse this path if the user's environment does not support the official client libraries (e.g., lightweight serverless functions, custom language stacks, or restricted runtimes).\n\n> [!IMPORTANT]\n> **Mandatory Agent Directive:** If the user chooses the REST path, you **MUST**:\n> 1. Use the `view_file` tool to lazy-load the REST reference file below.\n> 2. Apply **Dynamic Version Resolution** (Section B) to replace all `vXX` placeholders in the endpoint URLs (e.g., resolving `vXX` to `v24` in `https:\u002F\u002Fgoogleads.googleapis.com\u002Fv24\u002F...`).\n\n#### REST (HTTP)\nIf you need to set up the Google Ads API environment for REST (HTTP), do not guess the configuration.\nInstead, read the detailed setup guide:\n\n*   [Google Ads API REST Setup Reference](references\u002Frest.md)\n*(Protocol: Raw HTTP POST JSON)*\n\n---\n\n## Cross-Referencing: AI-Assistant & MCP Connection\n\n> [!TIP]\n> **AI Assistant \u002F MCP Integration Handoff:**\n> If the goal is to connect an **AI Assistant** (such as Gemini, Cursor, or Claude Code) to query Google Ads via natural language:\n> 1. **DO NOT** write custom scripts or client library code.\n> 2. **STOP** executing this skill.\n> 3. **Transition Immediately** to the **`google-ads-api-mcp-setup`** skill to install and configure the official Google Ads Model Context Protocol (MCP) Server.\n\n---\n\n## Step 4: Troubleshooting Common Errors\n\n> [!IMPORTANT]\n> **Static Diagnostics Constraint:** When troubleshooting, you **MUST NOT** execute bash commands, run local test scripts, or attempt to reproduce the error in the workspace. Rely entirely on static code analysis, configuration review, and the diagnostic guides below to prevent endless, failing execution loops.\n\n### 1. Error: `USER_PERMISSION_DENIED`\n\n*   **Symptom:** You receive a `USER_PERMISSION_DENIED` error when executing API requests (e.g., retrieving campaigns).\n*   **Likely Cause:** The authenticating OAuth2 user has access to the target client account *indirectly* through a **Manager Account**, but the request header is missing the Manager Account's ID.\n\n#### Required Agent Response Checklist:\nWhen helping a user with this error, your response **MUST** include:\n\n1.  [ ] **Explain the Hierarchy:** Explain that the authenticating user likely belongs to a Manager Account that sits above the target client account.\n2.  [ ] **Provide the Fix:** Instruct the user to add their 10-digit Manager Account ID as the `login_customer_id` in their configuration file.\n3.  [ ] **Explain the Routing Logic:** Explain that `login_customer_id` tells the API to route the OAuth credentials through the manager account to validate access to the child account.\n4.  [ ] **Provide the Configuration Template:** Show the exact YAML configuration block below.\n\n> [!CAUTION]\n> **Security Guardrail:** Under no circumstances should you suggest exposing\n> raw passwords, creating additional Google Cloud projects to avoid\n> access-level review, or widening OAuth scopes beyond the standard `adwords`\n> scope to bypass this error.\n\n#### Configuration Fix Example (`google-ads.yaml`):\n\n```yaml\nclient_id: INSERT_OAUTH2_CLIENT_ID_HERE\nclient_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE\nrefresh_token: INSERT_OAUTH2_REFRESH_TOKEN_HERE\n\n# Add your 10-digit Manager Account ID here to resolve USER_PERMISSION_DENIED:\nlogin_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE\n```\n\n### 2. Error: `CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION`\n\n*   **Symptom:** The script fails with `AuthorizationError.CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION` (API v25 and later) or `AuthorizationError.ACTION_NOT_PERMITTED` (v24 and earlier).\n*   **Likely Cause:** The Google Cloud project that owns your OAuth client has only **Test access**, and you are targeting a live production Google Ads account.\n*   **Legacy Variant:** Code that still sends a developer token may report\n    `DEVELOPER_TOKEN_NOT_APPROVED`. Developer tokens were sunset on\n    September 9, 2026. The fix is the same (the access level of the Cloud\n    project), plus upgrading the client library to a version that no longer\n    requires the token.\n\n#### Required Agent Response Checklist:\nWhen helping a user with this error, your response **MUST** include:\n\n1.  [ ] **Explain the Test Access Restriction:** Explain that a Cloud project with Test access is fully functional but **restricted to Google Ads Test Accounts only**.\n2.  [ ] **Define Production Access Levels:** You **MUST** explicitly list all\n    three access levels by name: state that targeting live production accounts\n    requires the Cloud project to hold **Explorer Access**, **Basic Access**,\n    or **Standard Access**, applied for on the\n    [Google Ads API Overview page](https:\u002F\u002Fconsole.cloud.google.com\u002Fgoogle\u002Fads-apis\u002Foverview)\n    in the Google Cloud Console. Do not condense or paraphrase this to \"at\n    least Basic Access\".\n3.  [ ] **Check the Right Project:** Remind the user that the access level is\n    read from the project that owns the OAuth client ID (user authentication)\n    or the service account (service account authentication), not from the\n    project currently selected in `gcloud`.\n4.  [ ] **Provide Sandbox Setup Steps:** Guide the user on how to set up a sandbox environment:\n    *   Create a **Test Manager Account** (available with Test access).\n    *   Create **Test Client Accounts** under that Test Manager.\n    *   Use the Test Client Customer ID in their configuration.\n5.  [ ] **Provide Links to the Guides:** Point the user to the official [Google Ads API Test Accounts Guide](https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Fbest-practices\u002Ftest-accounts.md.txt) and the [API access levels guide](https:\u002F\u002Fdevelopers.google.com\u002Fgoogle-ads\u002Fapi\u002Fdocs\u002Fapi-policy\u002Faccess-levels.md.txt).\n\n> [!CAUTION]\n> **Security & Integrity Guardrail:** You **MUST NOT** advise the developer to\n> modify the client library source code, bypass access-level checks, or use\n> third-party \"cracked\" wrappers to bypass this error. The restriction is\n> enforced server-side by Google, and client-side modifications will not work.\n\n",{"name":5,"metadata":56,"description":60,"compatibility":61},{"author":57,"version":58,"category":59},"google-ads-api-team","1.1.0","GoogleAds","Guides developers through Google Ads API quickstart: credential setup, choosing from 6 client libraries\u002FREST, configuring environments, and running a \"retrieve campaigns\" script. Troubleshoots common setup errors: USER_PERMISSION_DENIED, login_customer_id issues, and CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION (a Google Cloud project with Test access calling a production account).\n\nUse this skill when:\n- The user asks how to get started with the Google Ads API.\n- The user needs to set up Google Ads API access in a Google Cloud project or OAuth credentials.\n- The user wants to write a quickstart\u002Fexample script for Google Ads.\n- The user encounters errors like USER_PERMISSION_DENIED, CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION, or the legacy DEVELOPER_TOKEN_NOT_APPROVED.\n","Outbound HTTPS connectivity required to access the Google Ads API and documentation. Note: If network access is restricted, the agent will fall back to using the last-known stable versions cached within the skill resources.","main","4c6800d20130b5a3233e414609f1241013cec8cc","skills\u002Fads\u002Fgoogle-ads-api-quickstart",2005,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-14 01:51:35",{"source":8,"skillName":5,"commands":72,"prompt":82,"zipAvailable":83},[73,76,79],{"tool":74,"command":75},"npx","npx skills add google\u002Fskills --skill google-ads-api-quickstart",{"tool":77,"command":78},"bunx","bunx skills add google\u002Fskills --skill google-ads-api-quickstart",{"tool":80,"command":81},"pnpm","pnpm dlx skills add google\u002Fskills --skill google-ads-api-quickstart","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002FSKILL.md",true,[85,91,95,99,103,107,111],{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Fdotnet.md","REFERENCE","参考文档",4048,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002Freferences\u002Fdotnet.md",{"path":92,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fjava.md",8619,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002Freferences\u002Fjava.md",{"path":96,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Fperl.md",2915,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002Freferences\u002Fperl.md",{"path":100,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Fphp.md",4147,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002Freferences\u002Fphp.md",{"path":104,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Fpython.md",7762,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002Freferences\u002Fpython.md",{"path":108,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":109,"sourceHtmlUrl":110},"references\u002Frest.md",5331,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002Freferences\u002Frest.md",{"path":112,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":113,"sourceHtmlUrl":114},"references\u002Fruby.md",3626,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fads\u002Fgoogle-ads-api-quickstart\u002Freferences\u002Fruby.md",[116,150,176,203,230,254],{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":126,"publishedAt":51},"01M6998S2EZKD3GEJ7F943RZTE","sign-in-with-google-web","Implement, configure, and secure Sign In With Google (SiwG) using Google Identity Services (GIS \u002F `https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fclient`) across web architectures. Use when creating Google sign-in buttons, implementing Google One Tap with FedCM, integrating GIS in React\u002FNext.js\u002FAngular\u002FHTML, verifying ID tokens on backend runtimes (Python\u002FNode.js\u002FGo\u002FJava), enforcing Google Workspace domain restrictions (`hd`), securing client-side ID tokens via WebCrypto nonces or encrypted IndexedDB, embedding in cross-origin iframes via the Intermediate Iframe API (`https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fintermediate`), configuring Content Security Policy (CSP), COOP, and Permissions Policy (`identity-credentials-get`) headers, or handling sign-out and revocation. Don't use for legacy Google Sign-In (`gapi.auth2`), Google Cloud IAM service accounts, or Android\u002FiOS native Credential Manager.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fsign-in-with-google-web\u002FSKILL.md",[122,125],{"categoryNo":123,"categoryName":124,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[9,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149],"sign in with google web","sign","with","web","android","go","security","google workspace","google cloud","implement","policy","python","implementing","react","iam","permissions","buttons","secure","manager","identity","architectures","domain","runtimes",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":159,"publishedAt":51},"01M6998PHPDCAD684VW5WRG83D","dpop-adoption","Implement and debug OAuth 2.0 DPoP (RFC 9449) refresh token sender-constraining for WebCrypto, Node.js ES6, and browser runtimes integrating with Google's OAuth platform. Use when configuring non-extractable asymmetric key pairs (P-256), generating DPoP Proof JWTs for authorization code exchange and token refresh, or handling 400 use_dpop_nonce challenge retry loops at oauth2.googleapis.com\u002Ftoken. Don't use for unconstrained OAuth 2.0 flows (where refresh tokens are not bound to a client key pair), or for Google Cloud IAM \u002F service account authentication.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fdpop-adoption\u002FSKILL.md",[156,157,158],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[160,161,9,135,162,163,164,165,166,167,141,168,169,170,171,172,173,146,149,174,175],"dpop adoption","adoption","es6","retry","authentication","flows","challenge","code","browser","loops","at","node","token","pair","platform","when",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":188,"publishedAt":51},"01M6998M72TC73EEAQH4XC7EXW","retrieving-developer-knowledge","Searches, retrieves, and synthesizes official Google developer documentation across Google Cloud, AI\u002FGemini, Android, Chrome, Web, Flutter, Go, Firebase, and other Google developer platforms. Integrates with the Developer Knowledge MCP server (search_documents, get_documents, answer_query) or the Developer Knowledge REST API fallback. Use when searching for gcloud CLI commands, API syntax, IAM permissions, official documentation, architectural comparisons, or product choice overviews. Don't use for local filesystem lookups or non-Google documentation.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fretrieving-developer-knowledge\u002FSKILL.md",[182,183,186,187],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":184,"categoryName":185,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[189,190,44,191,135,192,193,194,195,196,197,198,199,175,200,36,201,141,202,142],"retrieving developer knowledge","knowledge","MCP","mcp server","official","developer documentation","get","search","local","choice","documents","query","across","documentation",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":209,"publishedAt":51},"01M6998J2CZEXS9BES9S3WWFKC","migrate-to-rust","Clones, analyzes, plans, and migrates legacy codebases (C++, Fortran, Java, Python, C, Shell) from a GitHub URL or local directory to a modern, high-performance, deterministic, 100% Safe Rust architecture, tracking live telemetry across every task bucket, test failure\u002Ffix cycle, and Profile-Guided Optimization (PGO) stage, and producing a first-person AI storytelling report and interactive HTML infographic. Use when migrating a GitHub repository or local codebase to Rust, porting legacy C++, Fortran, Python, or Java workloads to memory-safe Rust, designing Struct-of-Arrays (SoA) or SIMD Rust architectures, or optimizing Rust ports with LLVM PGO. Don't use for unrelated non-Rust refactoring or single-line syntax questions.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fmigrate-to-rust\u002FSKILL.md",[],[210,211,212,213,214,215,216,217,138,218,219,220,221,222,223,197,224,225,226,175,227,228,201,229],"migrate to rust","rust","migrate","github","memory","performance","directory","safe","ports","llvm","soa","cycle","porting","fix","arrays","infographic","high-performance","URL","architecture","unrelated",{"skillNo":231,"name":232,"nameZh":6,"description":233,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":234,"categories":235,"keywords":239,"publishedAt":51},"01M6998GCC3K29WZ82KXMB9E02","finding-google-skills","Google platform decision and setup guidance, loaded on demand from Google's skill catalog. Use when a developer is choosing or setting up part of their stack, such as where to run a service, a database, storage, messaging, authentication, analytics, ads, or AI model serving, and a Google product is a reasonable candidate - whether or not a vendor is named - or when a request names a Google product or API. Brings in the matching Google skill so the answer can weigh Google options, their trade-offs, and when they are not the right fit. Skip when the stack is already settled on another provider and no Google product is named, or the task involves no platform choice.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Ffinding-google-skills\u002FSKILL.md",[236,237,238],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[9,240,241,242,243,174,244,245,246,247,248,164,249,250,251,198,41,252,175,253,36],"finding google skills","storage","as","messaging","model","trade-offs","provider","answer","fit","catalog","up","decision","database","candidate",{"skillNo":255,"name":256,"nameZh":6,"description":257,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":258,"categories":259,"keywords":262,"publishedAt":51},"01M6998DWNHTH0BS6W1CY8ZXMP","workload-manager-basics","Use this skill to manage Google Cloud Workload Manager evaluations, rules, scanned resources, and validation results by using public client libraries and the REST API. Use when you need to inspect workload best-practice rules, create and run evaluations for Google Cloud general best practices, SAP, SQL Server, or custom organizational rules, review violations, export results to BigQuery, or automate Workload Manager through client libraries because no service-specific public CLI or MCP server is available. Don't use for general Google Compute Engine instance management, VPC configuration, or standard IAM auditing.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fworkload-manager-basics\u002FSKILL.md",[260,261],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[263,264,145,265,9,191,266,135,192,267,268,50,269,175,270,36,141,271,272,273,274],"workload manager basics","workload","basics","cli","review","vpc","inspect","you","create","libraries","server","run"]