> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Suggest keyword themes for a Google Ads campaign

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

Suggests keyword themes for one campaign, based on its landing page, locations and language.

This is deliberately separate from [Get campaign targeting](/api-reference/get-google-ads-campaign-targeting): suggestions are optional, so a slow or failing suggester never blocks the editor from loading what the campaign actually targets today.

Read `source` to know what you got. `generated` themes come from a language model and only appear for apps that have that turned on, so the same campaign can return `google` for one caller and `generated` for another. An empty `themes` list always reports `source` as `google`, whatever the real reason, so treat that combination as "no suggestions right now" rather than as a statement about Google.

Themes are suggestions. Anything the caller types is still valid to save through [Update campaign](/api-reference/update-google-ads-campaign).

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/google-ads/campaigns/{campaign_id}/keyword-theme-suggestions
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/google-ads/campaigns/{campaign_id}/keyword-theme-suggestions:
    get:
      summary: Suggest keyword themes for a Google Ads campaign
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Suggests keyword themes for one campaign, based on its landing page,
        locations and language.


        This is deliberately separate from [Get campaign
        targeting](/api-reference/get-google-ads-campaign-targeting):
        suggestions are optional, so a slow or failing suggester never blocks
        the editor from loading what the campaign actually targets today.


        Read `source` to know what you got. `generated` themes come from a
        language model and only appear for apps that have that turned on, so the
        same campaign can return `google` for one caller and `generated` for
        another. An empty `themes` list always reports `source` as `google`,
        whatever the real reason, so treat that combination as "no suggestions
        right now" rather than as a statement about Google.


        Themes are suggestions. Anything the caller types is still valid to save
        through [Update campaign](/api-reference/update-google-ads-campaign).


        <Note>This endpoint accepts a personal API key. Workspace API keys are
        not authorized for it and are rejected with a 403.</Note>
      operationId: >-
        get_campaign_keyword_theme_suggestions_api_apps__app_id__google_ads_campaigns__campaign_id__keyword_theme_suggestions_get
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose Google Ads campaigns to manage.
            title: App Id
          description: ID of the app whose Google Ads campaigns to manage.
          example: 6820f3a4e7b91d003c45a1f2
        - name: campaign_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              Base44's ID for the campaign, as returned in `id` by [List
              campaigns](/api-reference/list-google-ads-campaigns). This is not
              the Google Ads campaign ID, which is reported separately as
              `google_campaign_id`.
            title: Campaign Id
          description: >-
            Base44's ID for the campaign, as returned in `id` by [List
            campaigns](/api-reference/list-google-ads-campaigns). This is not
            the Google Ads campaign ID, which is reported separately as
            `google_campaign_id`.
          example: 68b1c0d4e7b91d003c45a1f2
      responses:
        '200':
          description: Suggested themes and where they came from.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GoogleAdsKeywordThemeSuggestions'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have access to this app, the app does not exist, or you
            used a workspace API key. A missing app and an app you cannot reach
            are deliberately the same answer.
        '404':
          description: >-
            The app has no connected Google Ads account, or there is no campaign
            with this ID.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    GoogleAdsKeywordThemeSuggestions:
      properties:
        themes:
          items:
            type: string
          type: array
          title: Themes
          description: Suggested themes for the campaign. Can be empty.
          example:
            - handmade oak furniture
            - custom dining tables
            - solid wood furniture
        source:
          type: string
          title: Source
          description: >-
            Where the themes came from. `google` means Google's own suggester.
            `generated` means a language model wrote them, which only happens
            for apps with that feature enabled. An empty `themes` list is always
            reported as `google`, including when the AI quota was spent or the
            campaign had too little detail to ask Google, so `google` with no
            themes does not mean Google returned nothing.
          example: google
      type: object
      required:
        - themes
        - source
      title: GoogleAdsKeywordThemeSuggestions
      description: Suggested keyword themes for a campaign, and where they came from.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````