---
title: "Regenerate a Google Ads setup keyword theme"
method: POST
path: "/api/apps/{app_id}/google-ads/setup-suggestions/regenerate-keyword"
---

# Regenerate a Google Ads setup keyword theme

`POST /api/apps/{app_id}/google-ads/setup-suggestions/regenerate-keyword`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions/regenerate-keyword`
- Auth: HTTP bearer

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Suggests one new keyword theme to replace one you rejected, for a campaign you have not launched yet.

Send the theme to replace as `current` and every theme already in the campaign as `existing`. A language model writes one replacement from the app's own content, and Base44 checks that it differs from all of them, ignoring case.

The call returns a 200 with `keyword_theme` set to `null` when there is no new theme: the app has nothing to read, the model fails, or it only comes up with themes you already have. Keep the old theme then. Nothing is saved.

<Note>This endpoint runs a language model and draws on a shared quota of 20 requests per minute per app, which every Google Ads AI endpoint debits. Enterprise workspaces get a higher quota. A 429 means the quota is spent, not that this endpoint has its own limit.</Note>

It is refused with a 409 while the workspace is on a Google Ads billing hold. Running the model does not spend credits.

<Note>This endpoint accepts a personal API key from anyone who can edit the app. A read-only key is refused with a 403, and so are workspace API keys.</Note>

## Path parameters

- `app_id` string, required: ID of the app you are setting up Google Ads for.

## Request body

- GoogleAdsRegenerateKeywordRequest
  - `current` string: The theme to replace. Only its first 80 characters are used.
  - `existing` string[]: Every theme already in the campaign, so the replacement is new. Only the first 25 are used, each cut to 80 characters.

## Response `200`

One replacement theme, or `null`.

- GoogleAdsRegeneratedKeywordTheme: One replacement keyword theme.
  - `keyword_theme` string, nullable, required: A theme that is not `current` and not in `existing`, or `null` when there is no new one. Keep the theme you had on a `null`.

## Other responses

- `401`: Missing or invalid credentials.
- `403`: You can't edit this app, the app does not exist, or you used a read-only or workspace API key. A missing app and an app you cannot reach are deliberately the same answer.
- `409`: The workspace is on a Google Ads billing hold.
- `422`: The body has a field other than `current` and `existing`, or a field of the wrong type.
- `429`: The app has used up its 20 language-model requests a minute. Retry later.

## Changes

- **2026-10-11** `80287813ab84`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-10-10** `fc604cdcc3a2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/google-ads/setup-suggestions/regenerate-keyword/post.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) - [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) - [OpenAPI document](https://skmtc.dev/idealspot/apis/base44-app-management-api/revisions/b5b4ebd82a1e?raw)
