Il existe deux types de comptes Google Ads : les comptes administrateur Google Ads et les comptes d'annonceur Google Ads. Pour obtenir une explication détaillée de la relation entre ces termes et d'autres (comme "compte client" et "client"), consultez Types de comptes.
Les comptes administrateur peuvent gérer d'autres comptes administrateur Google Ads ou des comptes d'annonceur Google Ads. Vous pouvez associer un compte d'annonceur à un compte administrateur, puis gérer le compte d'annonceur via le compte administrateur. La structure globale associée est un graphe orienté acyclique avec des comptes d'annonceur au niveau des feuilles.
Vous pouvez autoriser des utilisateurs ou des comptes de service individuels à accéder à des comptes Google Ads. Vous pouvez accorder l'accès à un compte d'annonceur de deux manières :
- Accordez à l'utilisateur un accès direct au compte d'annonceur en l'invitant à rejoindre ce compte.
- Accordez à l'utilisateur un accès indirect au compte d'annonceur en l'invitant à rejoindre un compte administrateur associé à ce compte. L'utilisateur obtient l'accès au compte d'annonceur, car le compte administrateur a accès à tous les comptes qui lui sont associés.
Vous pouvez également attribuer des rôles utilisateur lorsque vous invitez un utilisateur à gérer un compte.
Prenons l'exemple de la hiérarchie de comptes suivante. Supposons que tous les utilisateurs disposent d'un accès standard.

Le tableau suivant récapitule cette structure de compte.
| Utilisateur | A un accès direct à | A un accès indirect à |
|---|---|---|
| U1, SA1 | M1 | M2, A1, A2, A3 |
| U2 | M2, M3 | A1, A2, A3, A4 |
| U3 | A4 |
Numéro client utilisé pour la connexion
Un utilisateur peut avoir accès à plusieurs hiérarchies de comptes. Dans ce cas, lorsque vous effectuez un appel d'API, vous devez spécifier le compte racine à utiliser pour déterminer correctement les niveaux d'autorisation et d'accès au compte. Pour ce faire, incluez l'en-tête login-customer-id dans votre requête API.
Le tableau suivant utilise la hiérarchie de comptes de l'exemple précédent pour indiquer les numéros client de connexion que vous pouvez utiliser et la liste correspondante des comptes que vous pouvez appeler.
| Utilisateur | Numéro client utilisé pour la connexion à utiliser | de service pour effectuer des appels d'API |
|---|---|---|
| U1, SA1 | M1 | M1, M2, A1, A2, A3 |
| U2 | M2 | M2, A1, A2, A3 |
| U2 | M3 | M3, A1, A4 |
| U3 | A4 | A4 |
Vous pouvez ne pas fournir l'en-tête login-customer-id si l'utilisateur dispose d'un accès direct au compte Google Ads auquel vous envoyez des appels. Par exemple, vous n'avez pas besoin de spécifier l'en-tête login-customer-id lorsque vous utilisez des identifiants U3 pour appeler A4, car les serveurs Google Ads peuvent déterminer correctement le niveau d'accès à partir du numéro client (A4).
Si vous utilisez une bibliothèque cliente de l'API Google Ads, utilisez les paramètres suivants pour spécifier l'en-tête login-customer-id.
Java
Ajoutez le paramètre suivant à votre fichier ads.properties.
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
.NET
Ajoutez le paramètre suivant lorsque vous initialisez l'objet GoogleAdsConfig et utilisez-le pour créer un objet GoogleAdsClient.
GoogleAdsConfig config = new GoogleAdsConfig()
{
// ...
LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
};
GoogleAdsClient client = new GoogleAdsClient(config);
Python
Ajoutez le paramètre suivant à votre fichier google-ads.yaml.
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
PHP
Ajoutez le paramètre suivant à votre fichier google_ads_php.ini.
[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
Ruby
Ajoutez le paramètre suivant à votre fichier google_ads_config.rb.
Google::Ads::GoogleAds::Config.new do |c|
c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end
Créez une instance GoogleAdsClient en transmettant le chemin d'accès à l'emplacement où vous conservez ce fichier.
client = Google::Ads::GoogleAds::GoogleAdsClient.new(
'path/to/google_ads_config.rb'
)
Perl
Ajoutez le paramètre suivant à votre fichier googleads.properties.
loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
curl
Spécifiez l'argument de ligne de commande suivant lorsque vous exécutez la commande curl.
-H "login-customer-id: INSERT_LOGIN_CUSTOMER_ID_HERE"Vous pouvez utiliser la méthode CustomerService.ListAccessibleCustomers pour récupérer la liste des comptes auxquels un utilisateur a un accès direct.
Ces comptes peuvent être utilisés comme valeurs valides pour l'en-tête login-customer-id.
Java
private void runExample(GoogleAdsClient client) { // Optional: Change credentials to use a different refresh token, to retrieve customers // available for a specific user. // // UserCredentials credentials = // UserCredentials.newBuilder() // .setClientId("INSERT_OAUTH_CLIENT_ID") // .setClientSecret("INSERT_OAUTH_CLIENT_SECRET") // .setRefreshToken("INSERT_REFRESH_TOKEN") // .build(); // // client = client.toBuilder().setCredentials(credentials).build(); try (CustomerServiceClient customerService = client.getLatestVersion().createCustomerServiceClient()) { ListAccessibleCustomersResponse response = customerService.listAccessibleCustomers( ListAccessibleCustomersRequest.newBuilder().build()); System.out.printf("Total results: %d%n", response.getResourceNamesCount()); for (String customerResourceName : response.getResourceNamesList()) { System.out.printf("Customer resource name: %s%n", customerResourceName); } } }
C#
public void Run(GoogleAdsClient client) { // Get the CustomerService. CustomerServiceClient customerService = client.GetService(Services.V26.CustomerService); try { // Retrieve the list of customer resources. string[] customerResourceNames = customerService.ListAccessibleCustomers(); // Display the result. foreach (string customerResourceName in customerResourceNames) { Console.WriteLine( $"Found customer with resource name = '{customerResourceName}'."); } } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
PHP
public static function runExample(GoogleAdsClient $googleAdsClient) { $customerServiceClient = $googleAdsClient->getCustomerServiceClient(); // Issues a request for listing all accessible customers. $accessibleCustomers = $customerServiceClient->listAccessibleCustomers(new ListAccessibleCustomersRequest()); print 'Total results: ' . count($accessibleCustomers->getResourceNames()) . PHP_EOL; // Iterates over all accessible customers' resource names and prints them. foreach ($accessibleCustomers->getResourceNames() as $resourceName) { /** @var string $resourceName */ printf("Customer resource name: '%s'%s", $resourceName, PHP_EOL); } }
Python
def main(client: GoogleAdsClient) -> None: customer_service: CustomerServiceClient = client.get_service( "CustomerService" ) accessible_customers: ListAccessibleCustomersResponse = ( customer_service.list_accessible_customers() ) result_total: int = len(accessible_customers.resource_names) print(f"Total results: {result_total}") resource_names: List[str] = accessible_customers.resource_names for resource_name in resource_names: # resource_name is implicitly str print(f'Customer resource name: "{resource_name}"')
Ruby
def list_accessible_customers() # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new accessible_customers = client.service.customer.list_accessible_customers().resource_names accessible_customers.each do |resource_name| puts "Customer resource name: #{resource_name}" end end
Perl
sub list_accessible_customers { my ($api_client) = @_; my $list_accessible_customers_response = $api_client->CustomerService()->list_accessible_customers(); printf "Total results: %d.\n", scalar @{$list_accessible_customers_response->{resourceNames}}; foreach my $resource_name (@{$list_accessible_customers_response->{resourceNames}}) { printf "Customer resource name: '%s'.\n", $resource_name; } return 1; }
curl
# Returns the resource names of customers directly accessible by the user # authenticating the call. # # Variables: # API_VERSION, # OAUTH2_ACCESS_TOKEN: # See https://developers.google.com/google-ads/api/rest/auth#request_headers # for details. # curl -f --request GET \ "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
Que faire si la méthode ListAccessibleCustomers ne récupère pas mon numéro client ?
Si la méthode CustomerService.ListAccessibleCustomers n'a pas récupéré un numéro client que vous vous attendiez à voir apparaître dans les résultats, il existe plusieurs explications possibles.
Vous avez accès au numéro client, mais l'accès est accordé via un compte administrateur parent. Par exemple, si vous appelez la méthode
ListAccessibleCustomersavec les identifiants de l'utilisateurU1dans l'exemple précédent, la méthode ne renvoie queM1dans les résultats, même siU1a accès à d'autres comptes. Pour confirmer cette possibilité, récupérez la hiérarchie des comptes en exécutant des requêtessearchousearchStreamsur la ressourcecustomer_clientpour chacun des comptes renvoyés par la méthodeListAccessibleCustomers. Pour ce faire, définissez chacun de ces comptes commelogin-customer-id, comme décrit dans la section précédente. Si vous avez accès au compte cible, vous pouvez le récupérer dans l'une des hiérarchies de comptes.Vous utilisez des identifiants OAuth incorrects. Le scénario le plus courant est que vous utilisez les identifiants d'un autre utilisateur. Par exemple, cela peut être dû à une confusion accidentelle entre les identifiants de bac à sable ou de développeur et les identifiants de production, ou à une lecture incorrecte des identifiants d'un autre utilisateur à partir de la base de données ou du cache local. Pour résoudre ce problème, vous pouvez utiliser l'API Google People afin de récupérer le nom et l'adresse e-mail de l'utilisateur connecté, et vérifier s'ils correspondent à l'adresse e-mail attendue.
Vous n'avez pas accès au compte. Suivez le guide d'accès au compte pour obtenir l'accès au compte client approprié.
Rôles utilisateur
L'API Google Ads ne dispose pas de son propre modèle d'accès ni de champs d'application OAuth 2.0 distincts pour limiter les fonctionnalités. Par exemple, l'API Google Ads utilise les mêmes champs d'application pour les opérations en lecture seule et en lecture-écriture. À la place, l'API Google Ads suit les mêmes rôles utilisateur que Google Ads. Lorsqu'un rôle utilisateur est attribué à un compte au niveau administrateur, il est hérité par les comptes de la hiérarchie. Si un utilisateur dispose de rôles en conflit pour un compte donné, le niveau approprié est déterminé par le compte login-customer-id spécifié dans la requête API.
Le tableau suivant utilise la hiérarchie de comptes de l'exemple précédent et montre l'effet de l'attribution de différents rôles utilisateur aux utilisateurs.
| Utilisateur | Rôle utilisateur accordé | login-customer-id | Niveau d'accès effectif |
|---|---|---|---|
| SA1 | Accès standard au compte M1 | M1 | Accès standard sur M1, M2, A1, A2, A3 |
| U2 |
Accès standard sur M2 Accès en lecture seule sur M3 |
M2 | Accès standard sur M2, A1, A2, A3 |
| U2 |
Accès standard sur M2 Accès en lecture seule sur M3 |
M3 | Accès en lecture seule sur M3, A1, A4 |