Exemplos

Este guia contém exemplos de como chamar os endpoints REST diretamente, sem a uso de uma biblioteca de cliente.

Pré-requisitos

Todas as amostras abaixo devem ser copiadas e coladas em um bash shell com o comando curl.

Você também precisa de um token de desenvolvedor, recursos de teste de acesso à conta está bom, e uma Conta de administrador do Google Ads com pelo menos uma conta de cliente.

Variáveis de ambiente

Insira os IDs e as credenciais da conta abaixo e depois copie e cole na sua terminal para configurar as variáveis de ambiente usadas nos exemplos a seguir. O guia de Autorização fornece instruções para gerar uma Token de acesso do OAuth 2.0.

API_VERSION="17"
DEVELOPER_TOKEN="DEVELOPER_TOKEN"
OAUTH2_ACCESS_TOKEN="OAUTH_ACCESS_TOKEN"
MANAGER_CUSTOMER_ID="MANAGER_CUSTOMER_ID"
CUSTOMER_ID="CUSTOMER_ID"

Outros IDs de objetos opcionais

Alguns dos exemplos a seguir funcionam em orçamentos ou campanhas preexistentes. Se você tiver IDs de objetos existentes para usar com esses exemplos, insira-os abaixo.

BUDGET_ID=BUDGET_ID
CAMPAIGN_ID=CAMPAIGN_ID

Caso contrário, os dois Mutates - Creates examples vão criar um novo orçamento. e campanha.

O guia Manual de consulta contém muitos relatórios que correspondem a algumas das telas padrão do Google Ads e funcionam com as mesmas variáveis de ambiente usadas neste guia. Nossa consulta interativa Ferramenta de criação é também é um ótimo recurso para criar consultas personalizadas de maneira interativa.

Paginado

O método search usa paginação, com um tamanho de página fixo de 10 mil itens e um page_token especificado ao lado de query.

cURL

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data '{
"query": "
  SELECT campaign.name,
    campaign_budget.amount_micros,
    campaign.status,
    campaign.optimization_score,
    campaign.advertising_channel_type,
    metrics.clicks,
    metrics.impressions,
    metrics.ctr,
    metrics.average_cpc,
    metrics.cost_micros,
    campaign.bidding_strategy_type
  FROM campaign
  WHERE segments.date DURING LAST_7_DAYS
    AND campaign.status != 'REMOVED'
",
"page_token":"${PAGE_TOKEN}"
}'

GAQL

SELECT campaign.name,
  campaign_budget.amount_micros,
  campaign.status,
  campaign.optimization_score,
  campaign.advertising_channel_type,
  metrics.clicks,
  metrics.impressions,
  metrics.ctr,
  metrics.average_cpc,
  metrics.cost_micros,
  campaign.bidding_strategy_type
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
  AND campaign.status != 'REMOVED'

Streaming

O método searchStream transmite todos os resultados em uma única resposta, assim, o O campo pageSize não é compatível.

cURL

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:searchStream" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data '{
"query": "
  SELECT campaign.name,
    campaign_budget.amount_micros,
    campaign.status,
    campaign.optimization_score,
    campaign.advertising_channel_type,
    metrics.clicks,
    metrics.impressions,
    metrics.ctr,
    metrics.average_cpc,
    metrics.cost_micros,
    campaign.bidding_strategy_type
  FROM campaign
  WHERE segments.date DURING LAST_7_DAYS
    AND campaign.status != 'REMOVED'
"
}'

GAQL

SELECT campaign.name,
  campaign_budget.amount_micros,
  campaign.status,
  campaign.optimization_score,
  campaign.advertising_channel_type,
  metrics.clicks,
  metrics.impressions,
  metrics.ctr,
  metrics.average_cpc,
  metrics.cost_micros,
  campaign.bidding_strategy_type
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
  AND campaign.status != 'REMOVED'

Mudanças

Várias operações mutate (create, update ou remove) podem ser enviadas em uma um único corpo de solicitação JSON preenchendo a matriz operations.

Gera

Este exemplo cria dois orçamentos de campanha compartilhados em uma única solicitação.

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaignBudgets:mutate" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'create': {
      'name': 'My Campaign Budget #${RANDOM}',
      'amountMicros': 500000,
    }
  },
  {
    'create': {
      'name': 'My Campaign Budget #${RANDOM}',
      'amountMicros': 500000,
    }
  }
]
}"

O próximo exemplo usa o BUDGET_ID de um orçamento de campanha atual. é possível copie e cole o resultado da etapa anterior.

BUDGET_ID=BUDGET_ID

Os recursos que se referem a outros recursos fazem isso nome do recurso. A campanha criada abaixo refere-se a um campaignBudget pelo nome de recurso com valor de string.

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'create': {
      'status': 'PAUSED',
      'advertisingChannelType': 'SEARCH',
      'geoTargetTypeSetting': {
        'positiveGeoTargetType': 'PRESENCE_OR_INTEREST',
        'negativeGeoTargetType': 'PRESENCE_OR_INTEREST'
      },
      'name': 'My Search campaign #${RANDOM}',
      'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/${BUDGET_ID}',
      'targetSpend': {}
    }
  }
]
}"

Atualizações

Atualize atributos de objetos existentes usando operações update. O próximo usa uma campanha existente; copie e cole dos arquivos saída de uma etapa.

CAMPAIGN_ID=CAMPAIGN_ID

Todas as atualizações exigem um campo updateMask, uma lista separada por vírgulas de quais atributos JSON devem estar na solicitação, que devem ser aplicados como uma atualizar. Atributos listados no updateMask, mas não presentes na solicitação são apagados em um objeto. Atributos não listados em updateMask, mas presentes no corpo da solicitação, são ignorados.

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'update': {
      'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}',
      'name': 'A changed campaign name #${RANDOM}',
    },
    'updateMask': 'name'
  }
],
}"

Remover

Para remover objetos, especifique o nome do recurso como uma operação remove.

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'remove': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}'
  }
],
}"

Falhas parciais

Quando várias operações estão em uma única solicitação, é possível especificar partialFailure: Se true, as operações bem-sucedidas serão realizadas e operações inválidas retornam erros. Se false, todas as operações na solicitação terão sucesso se e somente se forem todos válidos.

O próximo exemplo usa uma campanha existente. copie e cole Exemplo de Cria a saída.

CAMPAIGN_ID=CAMPAIGN_ID

A solicitação a seguir contém duas operações. A primeira tenta alterar estratégia de lances da campanha fornecida, e a próxima tenta remover uma com um ID inválido. Como a segunda operação resulta em erro (o ID da campanha é inválido) e, como partialFailure está definido como false, o primeira operação também falhará, e a estratégia de lances da campanha existente será atualizado.

curl --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'partialFailure': false,
'operations': [
  {
    'update': {
      'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}',
      'manualCpc': {
        'enhancedCpcEnabled': false
      }
    },
    'updateMask': 'manual_cpc.enhanced_cpc_enabled'
  },
  {
    'remove': 'customers/${CUSTOMER_ID}/campaigns/INVALID_CAMPAIGN_ID'
  }
]
}"

Operações agrupadas

O método googleAds:mutate oferece suporte ao envio de grupos de operações com vários tipos de recursos. É possível enviar muitas operações de diferentes tipos para encadear uma sequência de operações que devem ser realizadas em grupo. O conjunto de operações será bem-sucedido se nenhuma operação falhar ou todas falharem, se alguma falha em uma única operação.

Este exemplo demonstra a criação de um orçamento de campanha, uma campanha, um grupo de anúncios e anúncio juntos como um único conjunto de ações. Cada operação sucessiva depende com a anterior. Se uma delas falhar, o grupo de operações vai falhar.

Números inteiros negativos (-1, -2, -3) são usados como marcadores de posição no recurso. e são preenchidos dinamicamente no tempo de execução com os resultados da sequência das operações.

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:mutate" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'mutateOperations': [
  {
    'campaignBudgetOperation': {
      'create': {
        'resourceName': 'customers/${CUSTOMER_ID}/campaignBudgets/-1',
        'name': 'My Campaign Budget #${RANDOM}',
        'deliveryMethod': 'STANDARD',
        'amountMicros': 500000,
        'explicitlyShared': false
      }
    }
  },
  {
    'campaignOperation': {
      'create': {
        'resourceName': 'customers/${CUSTOMER_ID}/campaigns/-2',
        'status': 'PAUSED',
        'advertisingChannelType': 'SEARCH',
        'geoTargetTypeSetting': {
          'positiveGeoTargetType': 'PRESENCE_OR_INTEREST',
          'negativeGeoTargetType': 'PRESENCE_OR_INTEREST'
        },
        'name': 'My Search campaign #${RANDOM}',
        'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/-1',
        'targetSpend': {}
      }
    }
  },
  {
    'adGroupOperation': {
      'create': {
        'resourceName': 'customers/${CUSTOMER_ID}/adGroups/-3',
        'campaign': 'customers/${CUSTOMER_ID}/campaigns/-2',
        'name': 'My ad group #${RANDOM}',
        'status': 'PAUSED',
        'type': 'SEARCH_STANDARD'
      }
    }
  },
  {
    'adGroupAdOperation': {
      'create': {
        'adGroup': 'customers/${CUSTOMER_ID}/adGroups/-3',
        'status': 'PAUSED',
        'ad': {
          'responsiveSearchAd': {
            'headlines': [
              {
                'pinned_field': 'HEADLINE_1',
                'text': 'An example headline'
              },
              {
                'text': 'Another example headline'
              },
              {
                'text': 'Yet another headline'
              }
            ],
            'descriptions': [
              {
                'text': 'An example description'
              },
              {
                'text': 'Another example description'
              }
            ],
            'path1': 'all-inclusive',
            'path2': 'deals'
          },
          'finalUrls': ['https://www.example.com']
        }
      }
    }
  }
]
}"

Gerenciamento da conta

Criação de contas

Crie novas contas usando o método createCustomerClient. O URL Requer um ID de conta de administrador em vez de um ID de conta de cliente. Um novo cliente é criada na conta de administrador.

curl f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${MANAGER_CUSTOMER_ID}:createCustomerClient" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'customerClient': {
  'descriptiveName': 'My Client #${RANDOM}',
  'currencyCode': 'USD',
  'timeZone': 'America/New_York'
}
}"

Como listar contas acessíveis

Usar uma solicitação GET simples para o método listAccessibleCustomers para acessar uma lista de contas do Google Ads acessíveis com o token de acesso OAuth 2.0 fornecido. Nenhum administrador ou IDs de conta de cliente devem ser usados nessa solicitação.

curl -f --request GET "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \

Upload de recursos binários

O método assets:mutate é usado para fazer upload e gerenciar Recursos. Os dados binários, como uma imagem, são codificados como uma string usando a codificação base64 padrão com padding. Padrão ou A codificação base64 segura para URL com ou sem padding é aceita.

Este exemplo codifica um GIF de 1 pixel para manter a amostra concisa. Na prática, Os payloads data são muito maiores.

Use o utilitário de linha de comando base64, que faz parte do Utilitários principais do GNU) para codificar uma imagem GIF de 1 pixel.

base64 1pixel.gif

O valor codificado em base64 é especificado como o atributo data em uma solicitação de API.

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/assets:mutate" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'create': {
      'name': 'My image asset #${RANDOM}',
      'type': 'IMAGE',
      'imageAsset': {
        'data': 'R0lGODlhAQABAAAAACH5BAEAAAAALAAAAAABAAEAAAIA'
      }
    }
  }
]
}"